1

私は正規表現を使用する初心者です。 と のような文字列がString1= "DELIVERY 'text1' 'text2'"ありstring2="DELIVERY 'text1'"、 を抽出したいです"text1"。このパターンでやってみた

 Pattern p = Pattern.compile("^DELIVERY\\s'(.*)'");
 Matcher m2 = p.matcher(string);

                if (m2.find()) {

                    System.out.println(m2.group(1));

                    }

結果は次 のとおりtext1' 'text2でした:1番目の文字列と text12番目の文字列についてもこれを試しました

Pattern p = Pattern.compile("^DELIVERY\\s'(.*)'\\s'(.*)'");
Matcher m2 = p.matcher(string);

                    if (m2.find()) {

                        System.out.println(m2.group(1));

                        }

String1のみの結果を返します

4

3 に答える 3

5

最初の試みはほぼ正しかった。置き換えるだけです:

.*

と:

.*?

これにより、演算子は「非貪欲」になり、一致するテキストができるだけ少なくなるように「飲み込み」ます。

于 2013-07-03T13:29:42.897 に答える
1

あなたの正規表現.*は「貪欲」であり、できるだけ多くの入力を消費しますが、それでも一致するため、最初の引用から最後の引用まですべてを消費します。

代わりに、を追加することで消極的なバージョンを使用します。?.*?

この変更をいくつかの Java カンフーと組み合わせると、すべて 1 行で実行できます。

String quoted = str.replaceAll(".*DELIVERY\\s'(.*?)'.*", "$1");
于 2013-07-03T13:44:35.783 に答える
0

のみが必要な場合は'text1'、次の正規表現を試してください。

"DELIVERY '([^']*)"

またはグループ化なし:

"(?<=DELIVERY ')[^']*"
于 2013-07-03T13:30:00.340 に答える