私はWindows Powershellを使ってテストしている.net regexを持っています。次のように出力されます貪欲でない正規表現は、greedyの結果を与える
> [System.Text.RegularExpressions.Regex]::Match("aaa aaa bbb", "aaa.*?bbb")
Groups : {aaa aaa bbb}
Success : True
Captures : {aaa aaa bbb}
Index : 0
Length : 11
Value : aaa aaa bbb
私の期待は年代の第二のグループは、式を満たすのに十分であるよう?
数量詞を使用すると、試合はaaa bbb
にさせるというものでした。非貪欲な量指定子の私の理解に欠陥があるのですか?または私は間違ってテストしていますか?
注:
regex: aaa.*?bbb
result: aaa aaa bbb
regex: aaa.*bbb
result: aaa aaa bbb bbb
正規表現エンジンがaaa
の最初の発生を発見し、その後、すべての文字(.*?
)をスキップ:Regular Expression nongreedy is greedy
私は最初にやっていたはずのことをやって、フリードルの関連する章に相談しました。それは私に 'aaa((?!aaa)。* bbb'に導かれました。あなたの答えには、サブ式を非キャプチャとし、bbbを負の数でテストするという追加の詳細があることを除いて、先のことを考える。いい答え。 –