1

次の正規表現は、Eclipse の検索ダイアログで機能しますが、Java では例外をスローします。

理由がわかりません

(?<=(00|\\+))?[\\d]{1}[\\d]*

実行時に構文エラーが発生します。

Pattern.compile("(?<=(00|\\+))?[\\d]{1}[\\d]*")

私が使用した検索で

(?<=(00|\+))?[\d]{1}[\d]*

電話番号を + または 00 の有無にかかわらず一致させたいのですが、13 番目の位置で構文エラーが発生するため、それはポイントではありません。2 番目の「?」を削除すると、エラーは発生しません。

Pattern.compile("(?<=(00|\\+))[\\d]{1}[\\d]*")

1 の代わりに、より大きな数を使用する必要がある場合があることを考慮してください。いずれにせよ、質問は構文エラーに関するものです。

4

3 に答える 3

1

データが次のように見える場合、00dddddまたは+dddddd が数字の場合は、取得したい@Bergiの正規表現でうまくいき(?<=00|\\+)\\d+ます。ただし、データに無視したい部分がない場合がある場合は、dddddおそらく次のようなグループメカニズムを使用する必要があります

String[] data={"+123456","00123456","123456"};
Pattern p=Pattern.compile("(?:00|\\+)?(\\d+)");
Matcher m=null;
for (String s:data){
    m=p.matcher(s);
    if(m.find())
        System.out.println(m.group(1));
}

出力

123456
123456
123456
于 2012-07-12T12:27:18.117 に答える
0

これが私のために働く例です:

public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(?<=00|\\+)(\\d+)");
        Matcher matcher = pattern.matcher("+1123456");
        if (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
于 2012-07-12T12:37:47.943 に答える
0

正規表現を大幅に短縮できます。内部にクラスが 1 つしかない場合、文字クラスは必要ありません。使用するだけ\dです。また{1}、かなり役に立たない。+また、 「1 つ以上」のマッチングにも使用できます(の略です{1,})。次に、後読みでの追加のグループ化は必要ありません。

そして最後に、なぜその後読みがオプション ( with ?) なのですか? 必要ない場合はそのままにしておいてください。これがパターン構文エラーの原因である可能性もあります。ルックアラウンドはオプションであってはなりません。

これを試して:

/(?<=00|\+)\d+/

ジャワ:

"(?<=00|\\+)\\d+"
于 2012-07-12T12:08:31.123 に答える