涉及嵌套分隔符/引号的正则表达式

时间:2014-09-21 07:11:35

标签: php regex

我有一个由撇号或双引号括起来的字符串。在字符串中,可能会出现另一个('非封闭')字符。我想使用正则表达式提取字符串的内容。

示例:string = "isn't";我要提取isn't

使用/[\'"]([^\'"]*)[\'"]/不起作用,因为它没有强加字符串被相同字符打开和关闭的约束。

使用/([\'"])([^\'"]*)(?1)/修复了该问题,但不允许在字符串中发生“其他”字符。我需要像/([\'"])(!(?1)*)(?1)/这样的东西,但我该怎么写呢?

作为奖励,我可以避免捕获开头字符,以便?1包含字符串内容吗?

1 个答案:

答案 0 :(得分:1)

组索引1包含双引号或单引号中的字符。

(?|"([^"]*)"|'([^']*)')

DEMO

你也可以使用下面的正则表达式,

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

DEMO

模式说明:

  • ([\'"])捕获起始单引号或双引号。
  • ((?:(?!\1).)+)捕获一个或多个字符,但不捕获组索引1中出现的字符。
  • \1必须以第1组捕获的角色结束。