Php 包含嵌套分隔符/引号的正则表达式
我有一个用撇号或双引号括起来的字符串。在字符串中,可能会出现另一个(“非封闭”)字符。我想使用正则表达式提取字符串的内容 示例:Php 包含嵌套分隔符/引号的正则表达式,php,regex,Php,Regex,我有一个用撇号或双引号括起来的字符串。在字符串中,可能会出现另一个(“非封闭”)字符。我想使用正则表达式提取字符串的内容 示例:string=“不是”我想提取的不是 使用/[\'”]([^\'“]*)[\'”]/不起作用,因为它不强制使用同一字符打开和关闭字符串 使用/([\'”)([^\'”]*)(?1)/修复了这一问题,但不允许“其他”字符出现在字符串中。我需要类似于/([\'”)(!(?1)*)(?1)/的内容,但如何编写它呢 作为奖励,我是否可以避免捕获开头字符,以便?1包含字符串内容?
string=“不是”代码>我想提取的不是
使用/[\'”]([^\'“]*)[\'”]/
不起作用,因为它不强制使用同一字符打开和关闭字符串
使用/([\'”)([^\'”]*)(?1)/
修复了这一问题,但不允许“其他”字符出现在字符串中。我需要类似于/([\'”)(!(?1)*)(?1)/
的内容,但如何编写它呢
作为奖励,我是否可以避免捕获开头字符,以便?1
包含字符串内容?组索引1包含双引号或单引号中的字符
(?|"([^"]*)"|'([^']*)')
或
您也可以使用下面的正则表达式
([\'"])((?:(?!\1).)++)\1
图案说明:
([\'”])
捕获起始单引号或双引号
((?:(!\1)。)+)
捕获一个或多个字符,但不捕获组索引1中存在的字符
\1
必须以组1捕获的字符结尾
谢谢!我想我需要将结尾处的\1
更改为PHP中的(?1)
。第二个看起来最有希望,因为我在引号内有一些额外的匹配(这与问题无关),所以我不希望对撇号和双引号重复所有内容。我将测试它。