我正在做一个像这样的非贪婪的比赛
'(?<C2>.+?)'
在引号内找到一个组。这很有效,直到我想做这样的事情
'(?<C2>.+?)' as
匹配引号后跟空格的内容,后跟单词as。
但是现在,以下内容不符合要求
'hello'123'hello2' as
我希望这根本不匹配......但它最终匹配整个块
'hello'123'hello2'
为C2
强迫非贪婪的.+?
包含'
的第一次出现的最佳方式是什么,而不是第一次出现' as
答案 0 :(得分:2)
你可以试试;
'(?<C2>[^']+?)' as
答案 1 :(得分:2)
这似乎有效
(?<C2>'[^']+')(?= as)
解释
NODE EXPLANATION
--------------------------------------------------------------------------------
(?<C2> group and capture to C2:
--------------------------------------------------------------------------------
' '\''
--------------------------------------------------------------------------------
[^']+ any character except: ''' (1 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
' '\''
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
as ' as'
--------------------------------------------------------------------------------
) end of look-ahead
即使没有前瞻(?= as)
,(?<C2>'[^']+')
也会按照预期的非贪婪方式匹配引用的字符串。
答案 2 :(得分:0)
我认为我对你的问题的理解与迄今为止回复的人不一样。通过
强迫非贪婪的最好方法是什么。+?包括第一次出现',而不是第一次出现'作为
你的意思是说你希望匹配前两个'
之间的单词,即hello
,而不是hello2
?在这种情况下,这是我的建议:
'(?<C2>.+?)'(?! as)
否定前瞻将确保您不会匹配as
之前的单词。
如果我误解了您的请求:抱歉。