Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包含嵌套分隔符/引号的正则表达式_Php_Regex - Fatal编程技术网

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)
。第二个看起来最有希望,因为我在引号内有一些额外的匹配(这与问题无关),所以我不希望对撇号和双引号重复所有内容。我将测试它。