【问题标题】:Match a given sequence only if not between quotes, taking escaped quotes into consideration仅当不在引号之间时才匹配给定序列,并考虑转义引号
【发布时间】:2015-06-13 21:25:56
【问题描述】:

我使用下面的正则表达式只匹配一个 given 字符序列,如果它没有被引号包围 - 也就是说,如果它后面跟着偶数个引号(使用正向前瞻)直到字符串结束。

假设我想匹配单词section,只有当它在引号之间时:

\bsection\b(?=[^"]*(?:"[^"]*"[^"]*)*$)

Working example on RegExr

如何扩展它以考虑转义引号?也就是说,如果我在链接示例中的引号之间插入 \",结果保持不变。

【问题讨论】:

  • @vks PCRE,这是我正在开发的 PHP 项目。该标签现已添加到问题中。
  • @vks 是的,很遗憾,它可能会发生。

标签: php regex pcre


【解决方案1】:

使用pcre可以skip引用的东西:

(?s)".*?(?<!\\)"(*SKIP)(*F)|\bsection\b

在字符串正则表达式模式中,必须对反斜杠进行三次转义,例如 \\\\ 以匹配 lookbehind 中的文字反斜杠。或者在单引号模式中,双转义对于这种情况就足够了。

$pattern = '/".*?(?<!\\\)"(*SKIP)(*F)|\bsection\b/s';

test at regex101

【讨论】:

  • 我也想过,但是可以有多个`\`,那么我们不知道我们是否必须忽略所有或只忽略奇数:P
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2021-07-10
  • 2015-11-30
相关资源
最近更新 更多