0

原文:

<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"to "testpage/page11.htm"

我应该如何更新我的表达方式?

"aaa.bbb.ccc"部分也可能是"abc.asd.dff.sssdf.sdfafda"或,项的"a.b"长度或项的数量不固定。

另一件事是我必须在一个正则表达式中完成所有替换操作。

4

1 回答 1

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>
于 2012-05-19T14:31:43.980 回答