【发布时间】:2014-04-03 08:37:45
【问题描述】:
我有一个字符串:
$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>.
为什么 hello world 之前的空格丢失了?
这是一个例子http://pastebin.com/SXFhsCGK。
谢谢。
【问题讨论】:
-
[\w*\d*\D*\W*\x*\O*\S*\s*]哎哟。你想在这里做什么? -
我正在尝试匹配 和 之间的所有内容。目标是用
标签替换 标签 -
当然,这可以做到,但问题不在于如何以不同的方式做到这一点,而是为什么会发生这种情况。
-
这会占用 之后的空格:
(<i>{1}\s*)。顺便说一句,我猜<i>{1}不是您想要的,它说“匹配<,然后匹配i,然后匹配(正好是一个,这是默认值)>”。 -
preg_replace('%<(/?)i>%', '<$1italic>', $test)
标签: php regex preg-replace