preg_replace与正确的组不匹配?

时间:2017-06-17 21:42:58

标签: php regex

我想写一个会忽略(例如)的正则表达式:

<div> or <i> or <div class="something"> but will catch <divdiv> and <iii> or <hello>.

我能够使用:

<(?!\/)(?!(i|div)(\s|>))(.*?)>

但是当我尝试返回第3组(。*?)时,它似乎没有回来:

$text = preg_replace("/<(?!\/)(?!(i|div)(\s|>))(.*?)>/i", 
                            "< $3>",  // note I added space
                            $text);

我还尝试使用$ 1和$ 2。我错过了什么吗?

更新,这对我来说根本不清楚。

我使用了以下

$text = preg_replace("/<(?!\/)(?!(i|div|p)(\s|>))(.*?)>/i", 
                        "< ${3}>",
                        $text);

在:

<p>test test test test annotation in <inline_code>power</inline_code>.</p>

根据https://regex101.com/,我应该得到:

<p>test test test test annotation in < inline_code>power</inline_code>.</p>

但是当我在服务器上运行它时,我得到了

<p>test test test test annotation in power.</p>

1 个答案:

答案 0 :(得分:0)

在我尝试的每个变体中,您的代码在我的控制台上运行正常;单引号,双引号,直接从您的帖子中复制......

php > $text = '<p>test test test test annotation in <inline_code>power</inline_code>.</p>';
php > $text = preg_replace("/<(?!\/)(?!(i|div|p)(\s|>))(.*?)>/i", 
php (                         "< ${3}>",
php (                         $text);
PHP Notice:  Undefined variable: 3 in php shell code on line 2

但是您更新的示例存在问题:

$table.css('width', $(window).width() - $("this").width() / 2)

我正在运行PHP7