php正则表达式 - 找不到错误

时间:2010-06-01 09:09:21

标签: php regex

只是一个简单,具体的问题:
我有字符串{var1}12345{var2},我想获得使用的变量名。

if (preg_match("/{([a-zA-Z0-9]*)}/g", $url, $matches)) {
    print_r($matches);
}

如果我删除全局标志,它可以工作,但我只按预期获得第一个变量。为什么不使用全球旗帜?当我使用Regex Tester

进行测试时,它可以正常工作

3 个答案:

答案 0 :(得分:3)

来自PHP: preg_match

  

preg_match()返回模式匹配的次数。这将是0次(不匹配)或1次,因为 preg_match()将在第一次匹配后停止搜索。相反,preg_match_all()将一直持续到主题结束。如果发生错误,preg_match()返回FALSE。

答案 1 :(得分:2)

使用preg_match_all获取多个匹配项:

if (preg_match_all("/{([a-zA-Z0-9]*)}/", $url, $matches)) {
    print_r($matches[1]);
}

答案 2 :(得分:1)

这应该可以解决问题(如果您需要格式为 {name} 的变量):

$url = "{var1}12345{var2}";

if (preg_match_all("/{[a-zA-Z0-9]*}/", $url, $matches)) {
    print_r($matches);
}