我有一个字符串:
$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示例。
谢谢。
答案 0 :(得分:2)
<强>解决方案强>
由于@Reeno将其放在评论中,直接将<i>
标记替换为<italic>
标记即可(假设它们是您想要替换的所有标记):
preg_replace('%<(/?)i>%', '<$1italic>', $test)
您的正则表达式出了什么问题
空格已丢失,因为它与\s*
中的<i>{1}\s*
匹配,因此它不在捕获组中。
此外,写[\w\W...]
表示&#34;匹配任何字母数字字符或任何不是字母数字的字符&#34; ...所以基本上,匹配所有字符。
{1}
量词是(总是?)无用(>{1}
相当于>
)。
启发式地说,你想要做的就是使用这个正则表达式(s
也是这样,点也匹配换行符):
~<i>(.*?)</i>~s