我想匹配以下字符串:
The sentence is 'He said "Hello there"'
The sentence is "He said 'Hello there'"
并获取单个捕获(匹配),即外部单引号或双引号内的句子 .
^The sentence is (?:(?:'([^']*)')|(?:"([^"]*)"))$
上面的正则表达式给了我2个被捕获的组,其中一个是空的,另一个包含所需的句子 .
^The sentence is (['"])(.*)\1$
返回引号(单引号或双引号)作为第1组,将句子作为第2组 .
如果我让第一组不捕获,
^The sentence is (?:['"])(.*)\1$
然后我不能使用后来对被捕获组的引用 . (\ 1当然不再是指单引号或双引号匹配)
有没有办法让那些“捕获”的组可以在后面的正则表达式中引用,但其捕获的值不会在匹配列表中返回?
或者其他一些方法来解决我(看似简单)的问题 .
3 回答
很伤心,但这种优雅和准确的方式不起作用:
但我们可以稍微改变一下,一切正常:
https://regex101.com/r/dKdBMT/2
我想确保这个正则表达式适用于所有情况:请更多测试它 .
这个似乎工作:
要么
如果你需要一个团体 .
这是演示:link
它有效,因为
*
是一个贪婪的量词,所以你不必知道最后是什么样的引用 .*
将尽可能多地采取行动 .您希望确保引号符号正确匹配,因此以单引号开头的引号以单引号结尾 . 此外,正则表达式应该允许使用反斜杠转义引号符号,如果它是绑定字符串的相同符号(双引号或单引号符号) . 试试这个:
"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'
这些样本符合此正则表达式:
'sing"le q\'uote'
"dou\"ble 'quote"