代码之家  ›  专栏  ›  技术社区  ›  Camsoft

可以在正则表达式的模式部分使用反向引用吗?

  •  3
  • Camsoft  · 技术社区  · 16 年前

    在正则表达式模式中是否有方法返回引用?

    输入字符串示例:

    Here is "some quoted" text.
    

    假设我想取出引用的文本,我可以创建以下表达式:

    "([^"]+)"
    

    此正则表达式将匹配 some quoted .

    假设我希望它也支持单引号,我可以将表达式更改为:

    ["']([^"']+)["']
    

    但是,如果输入字符串包含引号,会怎么样? Here is 'some quoted" text. 我不希望正则表达式匹配。目前,第二个示例中的regex仍然匹配。

    我想做的是,如果第一个报价是双引号,那么最后一个报价必须是双引号。如果起始报价是单报价,则结束报价必须是单报价。

    我能用回溯引用来实现这一点吗?


    我的其他相关问题: Getting text between quotes using regular expression

    3 回复  |  直到 12 年前
        1
  •  5
  •   codaddict    16 年前

    您可以使用regex:

    (["'])[^"']+\1
    
    • () :用于分组
    • [..] :是char类。所以 ["'] 要么匹配 " ' 相等的 到 "|'
    • [^..] :带否定的char类。 它匹配后面没有列出的任何字符 这个 ^
    • + :一个或多个量词
    • \1 :反向引用第一个 组是 (["'])

    PHP 你可以用这个作为:

    preg_match('#(["\'])[^"\']+\1#',$str)
    

    Working example

        2
  •  2
  •   Amal Murali    12 年前
    preg_match('/(["\'])([^"\']+)\1/', 'Here is \'quoted text" some quoted text.');
    

    说明: (["'])([^"']+)\1/ 我把第一个引号放在括号里。因为这是第一个分组,所以后面的参考号是1。然后,在结束引号所在的位置,我放置了1,这意味着 第1组中匹配的字符。

        3
  •  0
  •   knittl    16 年前

    /"\(.*?\)".*?\1/ 应该可以,但这取决于正则表达式引擎

    推荐文章