0

我对正则表达式很弱,需要帮助。我的问题是我必须将与给定模式匹配的所有字符串提取到一个数组中。请参阅下面的问题:

字符串

<?php
$alert_types = array(
    'warning' => array('', __l("Warning!") ),
    'error' => array('alert-error', __l("Error!") ),
    'success' => array('alert-success', __l("Success!") ),
    'info' => array('alert-info', __l("For your information.") ),
);?>

Preg_Match 代码

preg_match("/.*[_][_][l][\(]['\"](.*)['\"][\)].*/", $content, $matches);

我只得到第一个匹配是警告!. 我期待比赛将具有以下值:

Warning!, Error!, Success!, For your information.

实际上我正在使用 file_get_contents($file) 来获取字符串。

谁能帮我解决这个问题。先感谢您。

4

1 回答 1

2

preg_match()只找到字符串中的第一个匹配项。用于preg_match_all()获取所有匹配项。

preg_match_all("/.*__l\(['\"](.*?)['\"]\).*/", $content, $matches);

$matches[1]将包含您要查找的字符串数组。

顺便说一句,您不需要所有这些单字符括号。只需将字符放入正则表达式即可。

var_dump($matches);

array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(45) "    'warning' => array('', __l("Warning!") ),"
    [1]=>
    string(52) "    'error' => array('alert-error', __l("Error!") ),"
    [2]=>
    string(58) "    'success' => array('alert-success', __l("Success!") ),"
    [3]=>
    string(65) "    'info' => array('alert-info', __l("For your information.") ),"
  }
  [1]=>
  array(4) {
    [0]=>
    string(8) "Warning!"
    [1]=>
    string(6) "Error!"
    [2]=>
    string(8) "Success!"
    [3]=>
    string(21) "For your information."
  }
}
于 2013-10-25T01:07:30.730 回答