2017-12-20 15 views
3

Regex101リンク:https://regex101.com/r/MsZy0A/2なぜこの正規表現のパターンは一致しませんか?

私は次の正規表現パターンを持っています。 .++bに以下のテストデータを入力します。 aaaaaaaacaeb

私が理解できないのは、 "Possessive quantifier"です。私はそれが逆行しないことを読んだことがあります。しかし、私はそれがとにかく後退する必要はないと思いますか? .+はすべて(「b」を含む)と一致し、「b」は「b」と一致するため、「b」を含むすべてのものと一致する必要があります。

誰かがこれで所有量限定子の役割を説明できますか?

この質問は重複したものではありません。他の回答を読んだあとも、私はまだそれを得ていないため、この特定のケースについて質問しています。

+3

私はこのようなパターンは見たことがありませんが、 '(。+)+ b'はうまく動作します。 '。+ b'も同様です。 –

+0

なぜあなたは+を必要としますか? 2番目の+は何をするはずですか? – Andreas

+6

possessive量限定子は '。++'が最後の 'b'を含むすべてのものとバックトラックしないので、最後の' b'は決して一致しないので – anubhava

答えて

3

++可能な限り何回も返すことなく、返すことなく、.++と書くと、最後のbを含むすべてのものと一致します。そのため、あなたの正規表現に追加のbは決してマッチしません。

あなたが所有量限定子を使用していない場合、または一致するクラス[^b]++bからbを単に削除すると、これを回避できますが、最初に提案します。所持量は、ほとんど毎回不必要である。

+2

ええ、文字列の途中に1つ以上の 'b'があるとどうしますか?私は** [** b] ++ b' **が正しく動作するとは思わない* * ... '。+ b'の方が良いでしょうか? – Allan

+1

彼が実際にしたいことを知っているように、私は言うことができません。本当に最高の解決策は何ですか。 – Philipp

+0

ええ、私は+1に投票しました:-) – Allan

関連する問題