我对preg_match
有疑问,我无法弄明白。
让代码说出来:
function::wp_statistics_useronline::end
function::wp_statistics_visitor|today::end
function::wp_statistics_visitor|yesterday::end
function::wp_statistics_visitor|week::end
function::wp_statistics_visitor|month::end
function::wp_statistics_visitor|total::end
这些是在php中运行函数的一些字符串;
当我只使用一个function::*::end
时,它工作得很好。
但是当它包含多个功能时,不按我想要的方式工作
它解析匹配,如:
function::wp_statistics_useronline::end function::wp_statistics_visitor|today::end AND ....::end
所以基本上我需要Regex
代码将它们分开,并为每个array
function::*::end
答案 0 :(得分:1)
我假设您实际上使用的是function::(.*)::end
,因为function::*::end
永远不会起作用(它只能匹配"function::::::end"
等字符串。)
你的正则表达式在同一行上有多个匹配失败的原因是,量词*
默认是贪婪的,匹配尽可能多的字符。你需要让它变得懒惰:function::(.*?)::end
答案 1 :(得分:1)
非常直接:
$result = preg_match_all('~function::(\S*)::end~m', $subject, $matches)
? $matches[1] : [];
给出了:
Array
(
[0] => wp_statistics_useronline
[1] => wp_statistics_visitor|today
[2] => wp_statistics_visitor|yesterday
[3] => wp_statistics_visitor|week
[4] => wp_statistics_visitor|month
[5] => wp_statistics_visitor|total
)
和(第二个例子):
Array
(
[0] => wp_statistics_useronline
[1] => wp_statistics_visitor|today
)
示例中的正则表达式是中间部分周围不包含空格的匹配组。所以\S*
非常适合。
由于匹配组是第一个,因此您可以在运行正则表达式后使用$matches[1]
检索它。
答案 2 :(得分:0)
这就是你要找的东西:
功能\:\:(。*?)\:
确保点匹配所有标识符。
获得比赛后,通过forloop运行并在“|”上运行爆炸,将其推入阵列,然后使用炸药,你就得到了你正在寻找的东西。