我有我的正则表达式/'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
和我的测试代码('He said, "You're cool."' , 'Rawr')
(我的测试代码模拟传递给函数的参数。)
我将按照我的理解解释我的正则表达式,希望你们中的一些人能对我的问题有所了解。
1)/'
表示在匹配字符串的开头,需要有'
2)表示捕获除0 次或多次以外的(.*)
任何字符
3)表示不捕获但尝试执行第 4 步,如果它不起作用,请尝试第 5 步
4 )表示不捕获但需要有 0 个或更多空白字符的 a 后跟具有 0 个或更多空白字符的 a
5)表示不捕获但需要有\n
(?:(?:4)|(?:5))
(?:'\s*,\s*)
'
,
(?:'\))
')
所以它似乎应该返回这个(这就是我想要的):++但它返回:++
'
如果
我将He said, "You're cool."
我
的测试代码更改为(没有结束括号)它会返回我想要的,但是只要我添加它最后一个括号,那么我的 OR 运算符似乎可以为所欲为。我希望它首先测试是否有逗号,如果有逗号,则在此处中断,如果没有,则检查括号。
我试过切换第 4 步和第 5 步的位置,但 OR 运算符似乎总是默认放在一边。
我怎样才能匹配最短的金额?' ,
'
He said, "You're cool."' , 'Rawr
')
('He said, "You're cool."' , 'Rawr'
(?:'\))
问问题
10649 次
1 回答
23
我认为您的问题不是 OR 运算符,而是.*
. 它将匹配您的完整字符串,然后返回-track 直到以下表达式匹配。此回溯过程中的第一个匹配项将是'He said, "You're cool."' , 'Rawr
+ ')
。试试.*?
吧!
于 2012-08-29T16:16:54.897 回答