原文:
<tag keywords="testpage.page11" index="0">Good</tag>目标文本:
<a href="testpage/page11.htm">Good</a> 如何编写正则表达式?
到目前为止,我所拥有的:
匹配表达式:<tag keywords=\"(.+?)\" index="\d+">(.*?)</tag>
替换表达式:<a href="\1.htm">\2</a>
但问题是,我如何才能将"testpage.page11"替换为"testpage/page11.htm"
我应该如何更新我的表达式?
"aaa.bbb.ccc"部分也可以是"abc.asd.dff.sssdf.sdfafda"或"a.b",项的长度或项的数量不固定。
另一件事是我必须在一个正则表达式中完成所有的替换操作。
发布于 2012-05-19 22:31:44
你要匹配的Rexex是这样的:
/<tag keywords="([^"]+)" index="\d+">([^<]+)</tag>/这显然不能在单个替换中替换,但您可以使用像preg_replace_callback这样的函数在单个函数调用中完成此操作。
这里我提供了一段PHP代码来替换您的原始文本:
$str = '<tag keywords="foo.bar.testpage.page11" index="0">Good</tag>';
$link = preg_replace_callback('#<tag keywords="([^"]+)" index="\d+">([^<]+)</tag>#i',
create_function('$m',
'return "<a href=\"" . str_replace(".", "/", $m[1]) . ".htm\">".$m[2]."</a>";'),
$str);
echo $link . "\n";输出
<a href="foo/bar/testpage/page11.htm">Good</a>https://stackoverflow.com/questions/10665947
复制相似问题