代码之家  ›  专栏  ›  技术社区  ›  Jens Törnell

用PHP查找单引号和双引号之间的内容

  •  1
  • Jens Törnell  · 技术社区  · 5 年前
    My text "can contain" both single 'and double"' quotes. The quotes "can also be 'nested" as you can see.
    

    预期结果

    (3项数组)

    can contain
    and double"
    can also be 'nested
    

    我走了多远

    我不是正则表达式专家,远远不是。我还是设法得到了双引号之间的文字 I can "grab this" text

    preg_match_all("~\"(.*?)\"~", $text, $between);
    print_r($between);
    

    有效/无效

    • 有效期: This is "A text" (一篇文章)
    • 有效: This is 'A text' (一篇文章)
    • 有效期: This is "A 'text" (A'文本)
    • 有效期: This is 'A "text'
    • 无效: This is "A text (不均匀引号1)
    • This is 'A text (不均匀引号1)
    • This is "A "text" (不均匀引号3)
    • 无效: This is 'A 'text' (不均匀引号3)
    • This "is ' A " text' (相交)

    附加说明

    • This "has "one wrong" quote )
    • 我更喜欢regex解决方案,但如果有更好的非regex解决方案,就可以了。

    我的猜测是每个字符都需要循环和检查。如果它以一个 " "

    Stackoverflow上的答案不起作用

    这个答案是正确的 解决我的问题: regex match text in either single or double quote

    这里可以看到一个证据: https://regex101.com/r/OVdomu/65/

    0 回复  |  直到 5 年前
        1
  •  1
  •   Wiktor Stribiżew    5 年前

    你可以用

    if (preg_match_all('~(?|"([^"]*)"|\'([^\']*)\')~', $txt, $matches)) { 
        print_r($matches[1]);
    }
    

    regex demo PHP demo .

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

    看到了吗 this regex demo .

    (?|"([^"]*)"|\'([^\']*)\') 是一个 branch reset group " " " 或者 ' ' '