我想删除少于2个字符的<p> </p>
个标签。例如
$myText = "<p>hello world</p> <p>-</p> <p> </p>";
由于少于2个字符, <p>-</p>
和<p> </p>
应从$myText;
中删除。
我的模式是:
$output = preg_replace("/\b<p>[a-z]{1,2}</p>\b/","", $myText);
但当我回显$ output时,我看不到任何东西。这有什么问题?
答案 0 :(得分:4)
$output = preg_replace("/\b<p>[a-z]{1,2}</p>\b/","", $myText);
你有几个错误:
/
作为分隔符,但不要在模式中将其转义。您应该从此处收到错误但如果您什么也看不到,则必须关闭错误报告。通常在开发时打开错误报告是个好主意[a-z]
只匹配小写字母,而不是“任何”\b
是不必要的,实际上可能导致某些内容不匹配,具体取决于上下文试试这个:
$output = preg_replace("~<p>.?</p>~s","", $myText);
答案 1 :(得分:1)
你的第一个问题是,你必须在你的正则表达式中逃避斜线,否则它会认为这是你的分隔符,你应该收到警告:
警告:preg_replace():未知的修饰符&#39; p&#39;
所以你可能没有error reporting
开启。
其次,您要删除以下标签:<p>-</p>
和<p> </p>
,但您只允许a-z
两个标签之间。
所以将代码更改为:
<?php
$myText = "<p>hello world</p> <p>-</p> <p> </p>";
$output = preg_replace("/<[^>]+>.{1,2}<\/[^>]+>/","", $myText);
highlight_string($output);
?>
输出:
<p>hello world</p>
答案 2 :(得分:1)
尝试使用正则表达式模式:/<p>.{0,2}<\/p>/
您需要在结束/
中转义</p>
。
此代码还会检查不仅仅是按字母顺序排列的任何字符。
此代码还会检查2或更少(包括0)。我假设你想要它,然后重新阅读,并意识到你可能没有想要,但是如果你这样做,并且如果你不这样做就很容易改变:)
答案 3 :(得分:0)
您的示例文字会显示您要删除的字符串&#34;因为少于2个字符&#34;
$myText = "<p>hello world</p> <p>-</p> <p> </p>";
但您的模式是检查一个或两个小写字母。
$output = preg_replace("/\b<p>[a-z]{1,2}</p>\b/","", $myText);
您的示例中没有小写字母。
答案 4 :(得分:0)
此处的其他答案很接近,但您需要为量词添加lazy
修饰符,并为多行添加m
,以防<p>
个代码跨越多行:< / p>
$html = "<p>hello world</p> <p>-</p> <p> </p>";
$replaced = preg_replace("/<p([^>]+?)>.{1,2}<\/p>/m","", $html);