gpt4 book ai didi

php - 使用 PHP 在单引号和双引号之间查找内容

转载 作者:行者123 更新时间:2023-12-01 04:25:27 25 4
gpt4 key购买 nike

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 )
  • 我更喜欢正则表达式解决方案,但如果有更好的非正则表达式解决方案,那就没问题了。

  • 我的猜测

    我的猜测是每个字符都需要循环检查。如果它以 " 开头,需要将字符步进到下一个 "为了将它包裹起来。然后我想它需要从那个位置重置以查看下一种类型的引用是什么,然后再重新设置,直到字符串结束。

    Stackoverflow 上的答案不起作用

    这个答案确实 不是 为我的问题工作:
    regex match text in either single or double quote

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

    最佳答案

    您可以使用

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

    regex demoPHP demo .

    也支持转义引号的变体:
    '~(?|"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\')~s'

    this regex demo .
    (?|"([^"]*)"|\'([^\']*)\')branch reset group匹配任一 " ,然后是除 " 之外的任何 0+ 个字符然后是 "' ,然后是除 ' 之外的任何 0+ 个字符然后 ' , 同时将匹配引号之间的所有内容捕获到组 1 中。

    关于php - 使用 PHP 在单引号和双引号之间查找内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58949906/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com