【问题标题】:Regex detect line break正则表达式检测换行符
【发布时间】:2014-08-05 01:19:07
【问题描述】:

我有这条消息(不带引号,只是为了准确):

"hey, here i am<br /><br />
 "

注意换行后的空格。所以事情是这样的:我正在尝试删除所有不可见的字符和消息的&lt;br /&gt;,它们都在消息的末尾,使用正则表达式来表示“嘿,我在这里”。但我必须做错事,因为我无法让它发挥作用。这就是我尝试过的:

$content = preg_replace('{(<br(\s*/)?>|&nbsp;|\r\n|\r|\n| )+$}i', '', $content);

但消息在最后保持不变。一定是我错过了一些简单的事情。感谢您的帮助!

【问题讨论】:

  • 带有正则表达式的 HTML 也是一个坏主意。
  • \r\n|\r|\n 更改为\R。我介绍了该技术here

标签: php regex


【解决方案1】:

您不需要正则表达式来执行此操作。使用strip tags函数删除标签。

$str = 'hey, here i am<br /><br />';
echo strip_tags($str);//yields hey, here i am

如果您有工具已经可以做到这一点,请不要尝试编写自己的正则表达式来解析 HTML。有时根据情况有必要,但在你的情况下,我会说不是。只需使用内置函数即可。

【讨论】:

  • 我不能使用 stri_tags 因为消息中有一些 HTML,它是由用户使用所见即所得编辑器发布的。编辑:哦,我只记得我可以使用 strip_tags 只有一些标签。我会试试的。
  • 这就是“允许的标签”的用途。
  • 嗯,我已经在使用 HTMLPurifier 来指示应该允许哪些标签,将是重复代码。
  • @Zarathuztra:你的意思可能是$allowable_tags 函数的参数strip_tags(),正如official docs page 中提到的那样,对吧?
  • 哦,我累了(抱歉刚从机场过来)忘了说我要允许
    ,只是没有在消息的末尾。
【解决方案2】:

您可以使用以下正则表达式:

([^\s\w",](?:br\W*\s*)+)"$

Working demo

代码是:

$re = "/([^\\s\\w\\",](?:br\\W*\\s*)+)\\"$/"; 
$str = "\"hey, here i am<br /> test<br /><br />\n \""; 
$subst = ''; 

$result = preg_replace($re, $subst, $str);

【讨论】:

  • 有效,但不仅适用于
    :/.
  • @Codel96 你能发布一些你需要的样本吗?检查这个正则表达式添加br:([^\s\w",]br.*\s*)
  • 我想只删除字符串末尾的所有
    、空格和换行符。您的代码有效,但它需要 <.> 之后的所有内容
  • @Codel96 你能检查一下吗:regex101.com/r/vM2rL7/3。顺便说一句,如果这不符合您的需要,您可以更新该页面并给我链接,以便我可以帮助您提供示例数据
  • @Codel96 好的,检查一下:regex101.com/r/vM2rL7/5。正如你所提到的,它在末端加上 br
【解决方案3】:

你不应该使用正则表达式来做你想做的事。看看这个答案:RegEx match open tags except XHTML self-contained tags

改为使用strip_tags()

【讨论】:

  • 我投了赞成票,但我也不明白它来自哪里。你给我的链接很有趣。
【解决方案4】:
$str = 'hey, here i am<br /><br />';
$str=~s{(<br />|\s)*$}{}ig;

使用此代码可能会对您有所帮助

【讨论】:

    【解决方案5】:
    my $cnt;    
    $cnt = "hey, here i am<br /><br />";
        $cnt =~s/(<br \/>)*//isg;
    print $cnt;
     output : "hey, here i am"
    

    【讨论】:

    • 很好的答案附有代码示例,并为未来的读者提供了解释。虽然问这个问题的人可能理解你的答案,但解释你是如何得出这个问题的将帮助无数其他人。
    • @Stonz2 感谢您抽出宝贵时间正确审查并提供有用的 cmets。它确实有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多