【问题标题】:Regex not fully working正则表达式没有完全工作
【发布时间】:2014-09-06 13:09:05
【问题描述】:

我在我的页面中使用了一个特殊的标签。这个标签是这样组成的;

输入: {{ module : menu : params(mainmenu , index) }}

现在我遇到的问题是我的正则表达式没有读取第二个参数,所以我无法访问这个参数。

这是我的标签,我遇到了{{module:menu:params(mainmenu, index)}} 的问题

$str = 'params(null)';

preg_match_all('{
# matches "null" in " null)"
(?<=\s)[^,]+(?=\))

|

# matches "null" in "(null)"
(?<=\()[^,]+(?=\))

|

# matches "null" in "params(null"
(?<=params\()[^,]+

|    

# matches "true" in ", true" and ""foo"" in ", "foo""
(?<=,\s)[^,]+
}x', $str, $matches);

现在正则表达式开始工作,只给了我 1 个值,在带有参数的钩子之间。

PHP 给我的数组是:

$array = array
(
[0] => module
[1] => menu
[2] => params(mainmenu, index)
);

正则表达式用于匹配参数,因此它为我提供了我提供给标​​签的所有参数。

输出 现在只读取第一个参数,它给了我这个结果;

Array
(
[0] => Array
    (
        [0] => mainmenu
    )

)

想要的/预期的输出 但我想要/需要这个

Array
(
[0] => Array
    (
        [0] => mainmenu
        [1] => index
    )

)

我希望我的解释足够好,如果不是请评论,这样我可以更清楚。

【问题讨论】:

  • 您的输入和预期输出是什么?
  • 一切都在那里。我会提供更多有关此的信息,以便您更清楚地了解。
  • 您的问题中显示了三种不同的输入。您的代码中的一个是“params(null)”。如果您编辑代码以显示您正在使用的实际输入,那就太好了。
  • 当我将您的代码更改为 $str = '{{module:menu:params(mainmenu, index)}}'; 时,我会得到您想要/预期的输出......

标签: php regex tags


【解决方案1】:

您可以尝试以下正则表达式来获取 mainmenuindex 字符串的数组,

(?<=\()[^,]*|[^\) ]+(?=\))

DEMO

代码:

<?php
$data = " {{module:menu:params(mainmenu, index)}}";
$regex =  '~\w+[^,\(]+(?=[^()]*\))~';  // this is the solution that works
preg_match_all($regex, $data, $matches);
print_r($matches);
?>

输出:

Array
(
    [0] => Array
        (
            [0] => mainmenu
            [1] => index
        )

)

【讨论】:

  • 我不是正则表达式的真正专家,但链接很棒。也许如果我改变我的问题,它对你的理解会更深。我现在只是不知道该怎么办
  • 它确实有效!但只有当我只有 1 个参数时,我才会再次遇到问题。当我购买超过 2 个参数时,它只显示 2 个。
  • 在您的问题中发布超过 2 个参数的字符串。
  • 这是字符串 {{module:menu:params(mainmenu, index, test)}}
  • 在您最后的评论中提出了similar one,因此不会为您的最后一个提供新答案和加号:)
猜你喜欢
  • 2015-07-17
  • 2020-03-11
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2018-06-04
相关资源
最近更新 更多