首页 文章

正则表达式匹配单引号或双引号中的文本

提问于
浏览
5

我想匹配以下字符串:

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 回答

  • 2

    很伤心,但这种优雅和准确的方式不起作用:

    (["'])(?:\\\1|[^\1]+)*\1
    

    但我们可以稍微改变一下,一切正常:

    (["'])((?:\\\1|(?:(?!\1)).)*)(\1)
    

    https://regex101.com/r/dKdBMT/2

    我想确保这个正则表达式适用于所有情况:请更多测试它 .

  • 1

    这个似乎工作:

    (?:'|").*(?:'|")
    

    要么

    ((?:'|").*(?:'|"))
    

    如果你需要一个团体 .

    这是演示:link

    它有效,因为 * 是一个贪婪的量词,所以你不必知道最后是什么样的引用 . * 将尽可能多地采取行动 .

  • 5

    您希望确保引号符号正确匹配,因此以单引号开头的引号以单引号结尾 . 此外,正则表达式应该允许使用反斜杠转义引号符号,如果它是绑定字符串的相同符号(双引号或单引号符号) . 试试这个:

    "(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'

    这些样本符合此正则表达式:

    'sing"le q\'uote'

    "dou\"ble 'quote"

相关问题