从字符串末尾删除特定字符串

时间:2013-11-12 16:03:06

标签: php regex preg-replace

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

示例:全部删除< br>,& nbsp;和输入字符串末尾的空格。

  

“Hello world< br>< br>& nbsp;& nbsp;”

应该成为

  

“Hello world”。

我尝试了各种

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

但最终我的正则表达式知识让我失望。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

不要使用正则表达式来解析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];

答案 1 :(得分: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.

答案 2 :(得分:-2)

如果仅剥离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