PHP preg_match正则表达式

时间:2010-11-26 12:39:49

标签: php preg-match

$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: 添加第四个表达式而不是“=”

3 个答案:

答案 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)