原文:
<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"
,项目的长度或项目数量不固定。
另一件事是我必须在一个正则表达式中完成所有替换操作。
答案 0 :(得分:0)
你想要匹配的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>