2014-09-21 68 views
0

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

例子:string = "isn't";,我想提取isn't

使用/[\'"]([^\'"]*)[\'"]/不起作用,因为它没有规定该字符串是打开和关闭相同的字符的限制。

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

作为奖励,可我避免捕捉的开放性,使?1包含字符串的内容?

回答

1

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

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

DEMO

OR

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

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

DEMO

模式Explanatio n:

  • ([\'"])捕获起始单引号或双引号。
  • ((?:(?!\1).)+)捕获一个或多个字符但不是这是本组索引1.
  • \1必须与由组1
+0

由于所捕获的字符结束内的字符!我想我需要在PHP中将'\ 1'结尾改为'(?1)'。第二个看起来最有希望,因为我在引号内部有一些额外的匹配(与问题无关),所以我不想复制所有的撇号和双引号。我会测试一下。 – tetech 2014-09-21 09:22:20