0

クライアントのアプリケーションの一部として簡略パーサーを開発する。mediawiki に似たリンクを作成するための省略表現を設定したいと考えています。

IE:[[link_location|link_title]]最終的には<a href="link_location">link_title</a>

私がする必要があるのは、括弧の間から文字列を抽出して、処理できるようにすることです。リンクに入る前に、一連の検証とキーワード変換を行う必要があります。私はかなり新しいですpreg_match-括弧で囲まれた式を と一致させることはでき/\[\[(.*?)\]\]/ますが、途中から文字列を抽出する方法がわかりません。何が欠けているのか誰か教えてもらえますか? または、もし私がこれについてすべて間違っているとしたら、慈悲を持って正しい方向に向けてください?

ありがとう!

編集:明確にする必要がありました:文字列を抽出して処理する必要があるためpreg_replace、この場合、リンクに直接リンクしても機能しません。

4

2 に答える 2

3
$string = preg_replace("/\[\[([^\|]+)|([^\]]+)\]\]/", "<a href=\"\\1\">\\2</a>", $string);

もっと

http://php.net/manual/en/function.preg-replace.php

psはテストされていません。


編集に関して:

preg_match("/\[\[([^\|]+)\|([^\]]+)\]\]/", $input, $m);

$m[1] -- now is the location
$m[2] -- now is the title

たくさんある場合:

preg_match_all("/\[\[([^\|]+)\|([^\]]+)\]\]/", $input, $m);

$m[1] -- now contains all location occurrences
$m[2] -- now contains all title occurrences 

[編集] バグを修正しました。

于 2013-09-23T18:51:40.187 に答える
2

$1最初に一致したグループを$2取得し、2 番目などを取得します。

あなたの場合の作業コードは次のとおりです。

preg_replace("/\[\[(.*?)\|(.*?)\]\]/", "<a href=\"$1\">$2</a>", "[[link_location|link_title]]");
于 2013-09-23T18:52:55.743 に答える