通过php中的正则表达式在字符串中查找值

时间:2015-02-27 10:10:18

标签: php html regex preg-match

我试图从包含某些字符串(例如[name])的textarea中获取信息,并使用正则表达式模式找到包含在方括号中的每个项目(目前尝试使用preg_match,preg_split,preg_quote,preg_match_all)。似乎问题出在我提供的正则表达式模式中。

我目前的正则表达方式:
$menuItems = preg_match_all('/[^[][([^[].*)]/U', $_SESSION['emailBody'], $menuItems);

我尝试了很多其他模式,例如
/(?[...]\w+): (?[...]\d+)/

我们非常感谢您提供的任何帮助。

编辑:

示例输入:
[email] address [to] name [from] someone

$menuItems变量的var_dump上显示的消息:
array(1){[0] => string(0)“”}

编辑2:

感谢大家对此的帮助和支持,我很高兴地说它完全正常运行!

3 个答案:

答案 0 :(得分:0)

转过方括号并删除圆点:

$menuItems = preg_match_all('/[^[]\[([^[]*)\]/U', $_SESSION['emailBody'], $menuItems); 
//                         here __^    __^ ^

preg_match_all不会返回字符串。您必须为最后一个参数添加一个数组:

preg_match_all('/\[([^[\]]*)\]/U', $_SESSION['emailBody'], $matches); 

匹配项位于数组$matches

print_r($matches);

工作示例:

$str = '[email] address [to] name [from] someone';
preg_match_all('/\[([^[\]]*)\]/U', $str, $matches); 
print_r($matches);

<强>输出:

Array
(
    [0] => Array
        (
            [0] => [email]
            [1] => [to]
            [2] => [from]
        )

    [1] => Array
        (
            [0] => email
            [1] => to
            [2] => from
        )

)

答案 1 :(得分:0)

从上面的评论流中,您可以按如下方式简化正则表达式:

preg_match_all('/\[(.*)\]/U', $_SESSION['emailBody'], $menuItems);

有一点需要注意:

preg_match_all()使用匹配结果在第3个参数中填充数组。然后,您的示例行将使用preg_match_all()(整数)的结果覆盖此数组。

然后,您应该能够使用以下循环迭代结果:

foreach ($menuItems[1] as $menuItem) {
    // ...
}

答案 2 :(得分:0)

这是一个简单的解决方案。这个正则表达式将捕获包含在括号中的所有项目以及括号。

如果您不希望结果更改正则表达式中的括号为$regex = "/(?:\\[(\\w+)\\])/mi";

$subject = "[email] address [to] name [from] someone";
$regex = "/(\\[\\w+\\])/mi";
$matches = array();
preg_match_all($regex, $subject, &$matches);
print_r($matches);