1

正規表現に関する簡単な質問。私が持っている

String text = "foobar1foobar1";

そして、私は最初の1(foobar)の前に参加する必要があります私がそのようなことをするとき:

Pattern date_pattern = Pattern.compile("(.+)1");
Matcher matcher = date_pattern.matcher(text);
matcher.group(1);

しかし、私は「foobar1foobar」を受け取ります。

4

3 に答える 3

7

+数量詞は貪欲なので、可能な限り一致します。この数量詞の気が進まないバージョンが必要+?です。その場合、パターンは次のようになります。

(.+?)1
于 2012-05-20T12:22:47.763 に答える
2

貪欲および非貪欲な正規表現。.+貪欲であり、可能な限り長い一致を行います。a を追加する?と、貪欲ではなくなります。.+?

あなたの例では、正規表現は本当に必要ありませんが、それは単なる例だったと思います。代わりに、あなたの例でこれを行うことができます:

String firstPart = text.substring(0, text.indexOf('1'))

または分割された(非常に単純な)正規表現でさえ:

String firstPart = text.split("1")[0]

ほとんどの人にとって、どちらも正規表現よりも読みやすいでしょう。ただし、「1」がない場合は注意してください。

于 2012-05-20T12:24:41.223 に答える
1

別の方法として、分割機能を使用することもできます。

String s="foobar1foobar2";
String[] splitted = s.split("1");

検索している文字列は splitted[0] にあります。

于 2012-05-20T12:38:16.483 に答える