Php 删除<;p>;带有preg_replace且少于两个字符的标记

Php 删除<;p>;带有preg_replace且少于两个字符的标记,php,regex,Php,Regex,我想删除少于2个字符的标签。比如说 $myText = "<p>hello world</p> <p>-</p> <p> </p>"; 但当我回显$output时,我什么也看不到。这里有什么问题?示例文本显示了“因为少于2个字符”而要删除的字符串 $myText=“你好,世界-”; 但您的模式是检查一个或两个小写字母 $output = preg_replace("/\b<p>[a-z]{1,2}</p

我想删除少于2个字符的标签。比如说

$myText = "<p>hello world</p> <p>-</p> <p> </p>";

但当我回显$output时,我什么也看不到。这里有什么问题?

示例文本显示了“因为少于2个字符”而要删除的字符串

$myText=“你好,世界

-

”;
但您的模式是检查一个或两个小写字母

$output = preg_replace("/\b<p>[a-z]{1,2}</p>\b/","", $myText);
$output=preg_replace(“/\b[a-z]{1,2}

\b/”,“”,$myText);

示例中没有小写字母。

示例文本显示了“因为少于2个字符”而要删除的字符串

$myText=“你好,世界

-

”;
但您的模式是检查一个或两个小写字母

$output = preg_replace("/\b<p>[a-z]{1,2}</p>\b/","", $myText);
$output=preg_replace(“/\b[a-z]{1,2}

\b/”,“”,$myText);

您的示例中没有小写字母。

您的第一个问题是,您必须在正则表达式中转义斜杠,否则它会认为这是您的分隔符,您应该得到警告:

警告:preg_replace():未知修饰符“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>  
你好,世界


您的第一个问题是,您必须在正则表达式中转义斜杠,否则它会认为这是您的分隔符,您应该得到警告:

警告:preg_replace():未知修饰符“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>  
你好,世界


$output=preg_replace(“/\b[a-z]{1,2}

\b/”,“,$myText”)

您在这方面有几个错误:

  • 您使用
    /
    作为分隔符,但不在模式中转义它。你应该从中得到一个错误,但如果你什么也看不到,你必须关闭错误报告。开发时打开错误报告通常是个好主意
  • [a-z]
    只匹配小写字母,不匹配“任何”
  • 您说少于2个字符,所以它应该匹配0或1个字符。但是您的范围匹配1或2个字符
  • \b
    是不必要的,实际上可能会导致某些内容不匹配,具体取决于上下文
  • 您没有考虑到它跨越多行(这可能是真实上下文的情况)
试试这个:


$output=preg\u replace(“?

~s”,”,$myText);
$output=preg\u replace(“/\b[a-z]{1,2}

\b/”,“,$myText);

您在这方面有几个错误:

  • 您使用
    /
    作为分隔符,但不要在模式中转义它。您应该从中得到一个错误,但如果什么也看不到,则必须关闭错误报告。通常,在开发时打开错误报告是一个好主意
  • [a-z]
    只匹配小写字母,不匹配“任何”
  • 您说少于2个字符,所以它应该匹配0或1个字符。但是您的范围匹配1或2个字符
  • \b
    是不必要的,实际上可能会导致某些内容不匹配,具体取决于上下文
  • 您没有考虑到它跨越多行(这可能是真实上下文的情况)
试试这个:


$output=preg\u replace(“~?

~s”,”,$myText);

这里的其他答案很接近,但是如果您的
标记跨越多行,您需要为您的量词添加
惰性
修饰符,并为多行添加
m

$html = "<p>hello world</p> <p>-</p> <p> </p>";
$replaced = preg_replace("/<p([^>]+?)>.{1,2}<\/p>/m","", $html);
$html=“你好世界”

-

”; $replaced=preg_replace(“/]+?)>。{1,2}/m”,“”,$html);
这里的其他答案很接近,但是如果您的
标记跨越多行,您需要在量词中添加一个
惰性
修饰符,并为多行添加
m

$html = "<p>hello world</p> <p>-</p> <p> </p>";
$replaced = preg_replace("/<p([^>]+?)>.{1,2}<\/p>/m","", $html);
$html=“你好世界”

-

”; $replaced=preg_replace(“/]+?)>。{1,2}/m”,“”,$html);
对正则表达式模式尝试以下操作:
/{0,2}/
您需要在结束时退出
/

此代码还检查所有字符,而不仅仅是字母


此代码还检查2或更少(包括0)。我在假设您想要它的时候添加了这个,然后重新阅读并意识到您可能不想要它,但是如果您想要它,它就在那里,如果您不想要它,它很容易更改:)

对于正则表达式模式试试这个:
/{0,2}/
您需要在结束时退出
/

此代码还检查所有字符,而不仅仅是字母


此代码还检查2或更少(包括0)。我在假设您想要它的时候添加了这一点,然后重新阅读并意识到您可能不想要它,但如果您想要它,它就在那里,如果您不想要,它很容易更改:)

这也会错误地匹配许多
p
标记。如果要这样使用,则需要进行更广泛的搜索。您能否提供一个错误捕获的示例?当然:

这也会错误地匹配许多
p
标记。如果要这样使用,则需要进行更广泛的搜索。您能否提供一个错误捕获的示例?当然:

我认为这是真的,但当我这样做时失败了。PHP5.3是否可以使用这个正则表达式(work就是这么做的:()或者我把事情搞砸了:DYou是一个