2

?が貪欲な量指定子であり、それに気が進まないことを私は知って??います。次のように使用すると、常に空の出力が得られますか? それは常に左から右に動作するためですか(最初にゼロの出現を見てから一致した出現を見てください)、または別のものですか?

    Pattern pattern = Pattern.compile("a??");
    Matcher matcher = pattern.matcher("aba");
    while(matcher.find()){
        System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
    }

出力:

0[]0
1[]1
2[]2
3[]3
4

2 に答える 2

3

Java の実装についてはよくわかりませんが、regular-expressions.infoには次のように記載されてい??ます。

前の項目をオプションにします。怠け者なので、可能であればオプションのアイテムは除外されます。この構造は、使用が制限されているため、ドキュメントから除外されることがよくあります。

したがって、4 つの一致 (3 つの文字位置 + ent の空の文字列) が得られ、オプションaはそれらのそれぞれから除外されます。

于 2012-03-28T16:30:31.100 に答える
3

正規表現は次のように説明できます。

ゼロ文字との一致は常に成功するため、嫌がる要素が 1 つしか含まれていない正規表現には意味がありません。

于 2012-03-28T16:32:10.853 に答える