PHP preg_replace删除空格

时间:2014-04-03 08:37:45

标签: php regex preg-replace

我有一个字符串:

$test = "Test string<i> hello world</i>."

然后我正在运行

$test = preg_replace('/(<i>{1}\s*)([\w*\d*\D*\W*\x*\O*\S*\s*]*?)(<\/i>{1})/', '<italic>$2</italic>', $test);

结果是

Test string<italic>hello world</italic>.

为什么问候世界之前的空白会丢失?

以下是http://pastebin.com/SXFhsCGK示例。

谢谢。

1 个答案:

答案 0 :(得分:2)

<强>解决方案

由于@Reeno将其放在评论中,直接将<i>标记替换为<italic>标记即可(假设它们是您想要替换的所有标记):

preg_replace('%<(/?)i>%', '<$1italic>', $test)

您的正则表达式出了什么问题

空格已丢失,因为它与\s*中的<i>{1}\s*匹配,因此它不在捕获组中。

此外,写[\w\W...]表示&#34;匹配任何字母数字字符或任何不是字母数字的字符&#34; ...所以基本上,匹配所有字符。

{1}量词是(总是?)无用(>{1}相当于>)。

启发式地说,你想要做的就是使用这个正则表达式(s也是这样,点也匹配换行符):

~<i>(.*?)</i>~s