我的PHP正则表达式(正则表达式)应该如何?

时间:2012-07-15 16:28:14

标签: php regex preg-match-all

我有一个包含一些HTML和PHP文本的长字符串。在该字符串中,我想搜索所有出现的几个PHP函数调用并获取参数。现在我需要正则表达式的帮助。

要查找的功能:link_tolink_to_functionmail_to

我未完成的工作副本:

$regexp = '...' // Help here please!

$str = "Bla bla bla <?php echo link_to('Lorem', 'Ipsum') ?> bla bla bla <?php echo link_to_function(\"Lorem2\", \"Ipsum2\") ?> bla bla bla...";

preg_match_all
(
  $regexp,
  $str,
  $matches
);

我希望它返回这样的内容:

$matches = array
(
  [0] => array
  (
    [0] => "link_to('Lorem', 'Ipsum')"
    [1] => "link_to_function(\"Lorem2\", \"Ipsum2\")"
  )
  [1] => array
  (
    [0] => "Lorem"
    [1] => "Lorem2"
  )
  [2] => array
  (
    [0] => "Ipsum"
    [1] => "Ipsum2"
  )
);

正如您所看到的,参数可以被单引号和双引号括起来。参数中应该可以使用所有类型的字符。

还有一件事:每次通话都可以有一个两个参数。

2 个答案:

答案 0 :(得分:0)

我认为您可能需要单独测试一个或两个参数。对于两个参数,你需要这样的东西:

"link_to.*?\(\s*'(.*?)'\,\s*'(.*?)'\s*\)"

如果您认为您可能需要捕获双引号和单引号,请更改为:

"link_to.*?\(\s*['"](.*?)['"]\,\s*['"](.*?)['"]\s*\)"

答案 1 :(得分:0)

[a-z_]+\(\s*(?:['"](.*?)['"],?\s*)*\)

并在必要时进行改进,我手头没有PHP ......