【问题标题】:Remove specific strings from end of string从字符串末尾删除特定字符串
【发布时间】:2013-11-12 16:03:05
【问题描述】:

我需要从字符串的末尾删除特定的字符串。我可以用循环来做到这一点,但我认为用正则表达式应该是可能的。

示例:删除所有
, 和我的输入字符串末尾的空格。

“你好世界

   ”

应该变成

“世界你好”。

我尝试过各种排列方式

$input = preg_replace('/(<br>| |&nbsp;)*$/', '', $input);

但最后我的正则表达式知识让我失望了。我该怎么做?

【问题讨论】:

  • 发生了什么?你得到了什么?
  • 您提供的代码在$input = "Hello world&lt;br&gt; &lt;br&gt;&amp;nbsp; &amp;nbsp; "; 时有效。我错过了什么吗? (PHP 5.4.19 (cli))
  • @Sniffer - 剩下一个
    。
  • 天哪,尴尬 - 我只是没有在调试器中看到换行符。删除它们就可以了。谢谢大家的时间。最后,@plasmid87 的评论完成了这项工作,因为我仔细研究了前置条件。
  • @Jon:不,你不需要转义这些字符。

标签: php regex preg-replace


【解决方案1】:

您尝试过的正则表达式运行良好。将Content-Type 标头设置为plain 可能有助于调试:

$string = "Hello world<br> <br>&nbsp; &nbsp; ";
$input = preg_replace('/(<br>| |&nbsp;)*$/', '', $string);
header('Content-Type: text/plain');
var_dump($input);

输出:

string(11) "Hello world"

3v4l demo.

【讨论】:

  • 正如我在 cmets 中所写的,就是这样,你应该得到奖牌!
  • @Olaf: 耶(!) - 很高兴你知道了 :)
【解决方案2】:

不要使用正则表达式来解析 HTML。对于 DOM,它是:

$doc = DOMDocument::loadHTML('Hello world<br> <br>&nbsp; &nbsp;');
$selector = new DOMXPath($doc);

echo trim($selector->query('//text()')
    ->item(0)
    ->nodeValue
);

输出:

Hello World

但是,如果需要正则表达式解决方案 - 尽管知道它更好 - 使用这样的东西:

preg_match('~(.*?)(&nbsp;|<br>)~', $str, $matches);
echo $matches[1];

【讨论】:

  • 虽然原则上我同意第一句话,但我们不要在这里过分热心。目标不是解析任何东西。
  • @Jon 我认为是。我会在这里使用 DOM
  • 使用什么有待讨论。既定目标是什么(从输入中删除所有特定后缀)不是。那不是解析。您无需能够解析 JSON 即可删除关闭的 }。
  • @Jon 删除尾随 } 与提取数据无关。但是,添加了一个正则表达式示例。我希望它有所帮助.. 仍然认为 DOM 解决方案更稳定。
  • 谢谢,有趣的建议。但是,如果我查询文本,这不会杀死该文本中的其他 html 标签吗?我绝对只是想摆脱这些特定的字符串。
【解决方案3】:

如果您要剥离的只是 HTML/PHP 标签,您可以使用 php strip_tags 函数 more info

$userInput ="Hello world<br> <br>&nbsp; &nbsp; ";

$input = rtrim(strip_tags($userInput));//to rtrim to remove any whitespace at the end

【讨论】:

  • 这不会删除&amp;nbsp;,并且会删除输入中的anywhere 标记(假设strip_tags 不会使字符串无法识别)。这应该很容易看到。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多