$var = '<lang test=<php>string</php>><lang test2=before<php>inside</php>>'.
'<lang test3=THIRD_WITHOUT_PHP_TAGS><lang test4>';
if (preg_match_all('#<lang (.*?)>#', $var, $gg))
{
var_dump($gg[1]);
}
我得到转储:
array(2) {
[0]=>
string(9) "test=<php"
[1]=>
string(16) "test2=before<php"
}
但我想得到:
test=<php>string</php>
和
test2=before<php>inside</php>
和
test3=THIRD_WITHOUT_PHP_TAGS
和
test4
怎么做?
修改: 我更改了$ var和ADD第三个表达式
编辑2: 添加第四个表达式而不是“=”
答案 0 :(得分:3)
最简单的方法是
#<lang (\w+=[^<]*(<[^>]+>)?[^<]+(?(2)</[^>]+>))>#
正则表达式检查标记是否匹配,然后检查结束标记。
如果你想要捕捉第四个参数,你需要使用
#<lang (\w+(=[^<]*(<[^>]+>)?[^<]+(?(3)</[^>]+>))?)>#
答案 1 :(得分:0)
$var = '<lang test=<php>string</php>><lang test2=before<php>inside</php>>';
if (preg_match_all('#<lang (.*>)>#U', $var, $gg))
{
var_dump($gg[1]);
}
答案 2 :(得分:-1)
我会这样做:
preg_match("/<lang (.*)>/i", $var, $gg)