次のパターンの文字列を解析するためのphpの正規表現を探しています。コマンドは、次のように二重角括弧で囲まれています。
[[a src="" desc=""]]
ここで、a、src、descはキーワードです(変更されません)。srcを指定する必要がありますが、descはオプションです。srcまたはdescの値は、二重引用符または一重引用符で囲むことができます。また、srcとdescは任意の順序で指定できます。たとえば、次のパターンはすべて有効です
[[a src="http://a.c.d" desc ="hello"]]
[[a src ="http://a.c.d" desc= 'hello']]
[[a desc ="hello " src= 'http://a.c.d' ]]
[[a src = "http://a.c.d" ]]
[[a src="http://a.c.d" desc ="hello"]]
値と「a」、「src」、「desc」、「=」(引用符なし)の間のスペースはすべて無視する必要があります。このコマンドを次のようなhtmlタグに置き換えます
SOMETHING_EXTRACT_FROM_DESC
作業を行うために1つの正規表現を考えるのはかなり難しいようです。これで、異なるケースを個別に処理するための3つの正規表現セットアップができました。こんな感じ
$pattern = '/\[\[a[:blank:]+src[:blank:]*=[:blank:]*"(.*?)"[:blank:]+desc[:blank:]*=[:blank:]+"(.*?)"\]\]/i';
$rtn = preg_replace($pattern, '<a href="${1}">${2}</a>', $src);
$pattern = '/\[\[a[:blank:]+desc[:blank:]*=[:blank:]*"(.*?)"[:blank:]+src[:blank:]*=[:blank:]+"(.*?)"\]\]/i';
$rtn = preg_replace($pattern, '<a href="${1}">${2}</a>', $rtn);
$pattern = '/\[\[a[:blank:]+src[:blank:]*=[:blank:]+"(.*?)"\]\]/i';
$rtn = preg_replace($pattern, '<a href="${1}">${2}</a>', $rtn);
しかし、これは機能しません。正規表現を学ぶのは難しいです:(