2017-03-21 23 views
-2

文字列str = "XYhaku(ABH1235-123548)";文字列の上から"マイナス記号"はこの正規表現にどのように?

は、私が唯一の「ABH1235-123548」を必要とし、これまでのところ、私は正規表現

Pattern.compile("ABH\\d+") 

を作成したが、それはそれのために何が正しい正規表現false.so私を返します。

+0

'Pattern.compile( "ABH [\\ D - ] +")を試してみてください'。 '\ d'には' -' –

+0

thxは含まれていないことに注意してください。 –

答えて

1

\dは数字にのみ一致します。 AZ間のすべての文字に一致する(それ以外の場合は、範囲指標として扱われるので-は、文字クラスの最初または最後に配置されなければならないこと[A-Z]

Pattern.compile("ABH[\\d-]+") 

注:他の文字が含まれるように、character classを使用、 例えば)。あなたがしたい場合は、

Pattern p = Pattern.compile("\\((?<data>[A-Z\\d]+\\-\\d+)\\)"); 

または:

+0

文字クラス内の範囲指示子をいつでも( '\\ - ')エスケープできると思います。 – Rogue

+0

そうです。私の個人的な好みは、正規表現に避けることができるとき、特にJavaではバックスラッシュを追加しないことですが、それは絶対条件ではありません。 –

+0

これは複数の '-'シンボルを取得しないでしょうか? 'ABH \ d + - \ d +'で十分でしょうか? –

1

私は括弧内にあるものは何でもつかむだろう...もう一つの方法は、それはそれをエスケープすることです避けるために、それはあなたの文字列に2つのバックスラッシュを追加します(任意のかっこ)もっとオープンに:

Pattern p = Pattern.compile("\\((?<data>.+\\)\\)"); 

それからちょうどそれを引き抜きに:

String s = /* some input */; 
Matcher m = p.matcher(s); 
if (m.find()) { //just find first 
    String tag = m.group("data"); //ABH1235-123548 
} 
関連する問題