我正在寻找 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"]]
value 和 'a', 'src', 'desc', '=' (不带引号)之间的任何空格都应该被忽略。我将用 html 标签替换这个命令,比如
SOMETHING_EXTRACT_FROM_DESC
想出一个正则表达式来完成这项工作似乎相当困难。现在我有 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);
但这不起作用,正则表达式很难学习:(