Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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_Backreference - Fatal编程技术网

Php 可以在正则表达式的模式部分使用反向引用吗?

Php 可以在正则表达式的模式部分使用反向引用吗?,php,regex,backreference,Php,Regex,Backreference,有没有办法在正则表达式模式中返回引用 输入字符串示例: Here is "some quoted" text. 假设我想拉出引用的文本,我可以创建以下表达式: "([^"]+)" 此正则表达式将匹配一些引用的 假设我希望它也支持单引号,我可以将表达式更改为: ["']([^"']+)["'] 但是如果输入字符串混合了引号怎么办?比如说这里是'some quoted'文本。我不希望正则表达式匹配。目前第二个示例中的正则表达式仍然匹配 我想做的是,如果第一个报价是双报价,那么结束报价必须是双报

有没有办法在正则表达式模式中返回引用

输入字符串示例:

Here is "some quoted" text.
假设我想拉出引用的文本,我可以创建以下表达式:

"([^"]+)"
此正则表达式将匹配一些引用的

假设我希望它也支持单引号,我可以将表达式更改为:

["']([^"']+)["']
但是如果输入字符串混合了引号怎么办?比如说
这里是'some quoted'文本。
我不希望正则表达式匹配。目前第二个示例中的正则表达式仍然匹配

我想做的是,如果第一个报价是双报价,那么结束报价必须是双报价。如果开始报价是单报价,那么结束报价必须是单报价

我可以使用反向引用来实现这一点吗


我的另一个相关问题:

/“\(.*?\)”*?\1/
应该可以工作,但这取决于正则表达式引擎

preg_match('/(["\'])([^"\']+)\1/', 'Here is \'quoted text" some quoted text.');

解释:
([“]])([^“']+)\1/
我将第一个引号放在括号中。因为这是第一个分组,它的后参考号是1。然后,在结束引号所在的位置,我将\1放在第1组中匹配的字符上。

您可以使用正则表达式:

(["'])[^"']+\1
  • ()
    :用于分组
  • […]
    :是char类。因此
    [“”]
    匹配
    等效项 到
    “|”
  • [^..]
    :带有否定的char类。 它匹配后面未列出的任何字符
    ^
  • +
    :一个或多个的量词
  • \1
    :反向引用第一个
    ([“'))
PHP
中,您可以将其用作:

preg_match('#(["\'])[^"\']+\1#',$str)