我想写一个会忽略(例如)的正则表达式:
<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>
答案 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