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"

もう 1 つのことは、すべての置換操作を 1 つの正規表現で完了する必要があることです。

4

1 に答える 1

0

一致させようとしている Rexex は次のとおりです。

/<tag keywords="([^"]+)" index="\d+">([^<]+)</tag>/

これは明らかに1 回のpreg_replace_callback置換で置き換えることはできませんが、1 回の関数呼び出しでこれを行うような関数を使用できます。

ここで、元のテキストを置き換える 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 に答える