1

こんにちは、正規表現について質問があります。私は現在、任意の文字のサブストリングに続いて、d09などの任意の2つの数字を取得する方法を見つけようとしています。

私は正規表現を思いつき^[a-z]{1}[0-9]{2}$、文字列で実行しました

sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0

ただし、r30は検出されません。以下のコードは、Javaでの私のアプローチを示しています。

Pattern pattern = Pattern.compile("^[a-z]{1}[0-9]{2}$");
Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0");

if(matcher.matches())
    System.out.println(matcher.group(1));

マッチャーがサブストリングを検出しないため(デバッガーで実行した場合)、何も出力されません。何が間違っているのでしょうか。

4

5 に答える 5

6

3つのエラーがあります:

  1. 式にアンカーが含まれています。^文字列の先頭で$のみ一致し、最後でのみ一致します。したがって、正規表現は一致しますが、一致"r30"しません"foo_r30_bar"。サブストリングを検索しているので、アンカーを削除する必要があります。

  2. するmatches必要がありますfind

  3. 正規表現に括弧がないため、グループ1はありません。group()の代わりに使用してくださいgroup(1)

これを試して:

Pattern pattern = Pattern.compile("[a-z][0-9]{2}");
Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0");

if(matcher.find()) {
    System.out.println(matcher.group());    
}

イデオネ


マッチャーのドキュメント

マッチャーは、パターンのマッチャーメソッドを呼び出すことによってパターンから作成されます。作成したマッチャーは、次の3種類の照合操作を実行するために使用できます。

  • matchesメソッドは、入力シーケンス全体をパターンと照合しようとします。
  • LookingAtメソッドは、最初から入力シーケンスをパターンと照合しようとします。
  • findメソッドは、入力シーケンスをスキャンして、パターンに一致する次のサブシーケンスを探します。
于 2012-12-25T01:32:47.403 に答える
2

文字列の開始と終了を区切るため^、一致しません。$どこにでも置きたい場合は、それを削除すれば成功します。

于 2012-12-25T01:33:19.493 に答える
1
  1. 正規表現は固定されているため、入力全体が正規表現と一致しない限り、正規表現は一致しません。を使用し[a-z][0-9]{2}ます。

  2. 使用しないでください.matches()が、.find().matches()は恥ずかしそうに誤った名前が付けられ、入力全体と一致させようとします。

于 2012-12-25T01:33:28.583 に答える
0

どう"[a-z][0-9][0-9]"ですか?それはあなたが探しているすべての部分文字列を見つけるはずです。

于 2012-12-25T01:41:34.750 に答える
0

^ [az] {1} [0-9] {2} $

sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0

私がこれを読むことができる限り

  • 最初に下にあるものを見つけると、その後に[s]キャップ文字が表示されます。これは、文字列の長さが3ワードの文字であることを意味する2つの数字が必要です。

たぶん私があなたの文字列についてもっとデータを持っているなら私は助けることができます

編集

*ドット数が確かな場合は

この行を変更します

Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0");

Matcher matcher = pattern.matcher("sedfdhajkldsfakdsakvsdfasdfr30.reed.op.1xp0".split("\.")[0]);

ノート:-

私のソリューションを使用すると、パターンの先頭の^を省略する必要があります

文字列の分割については、このページをお読みください

于 2012-12-25T13:26:49.330 に答える