我有问题,我不知道从哪里开始。
我有这样的模式列表:
$pattern[1]="something%var1%aaa";
$pattern[2]="something else %MyVar% with more %variable%s";
$givenString="something else 12 with more 1234s";
我想知道模式索引,我想知道我的字符串匹配(如果有的话),如果是这样,那个模式中的值列表和变量名称,例如,在这种情况下,我会得到:
$patternId=2;
$variables['MyVar']=12;
$variables['variable']=1234;
或者,如果没有模式匹配,我也会知道。
它不必是%关闭,它可以是{...}或$ ... $或其他类似的东西。
我花了一些时间在上面,但我发现的是一些与我需要的非常相似的正则表达式,但并不完全相同。主要的问题是,我需要命名我的参数,正则表达式只有(\ s +),(\ d +)等,我必须命名所有这些参数,因为这将允许我不必写所有那些IF,当我有500个模式,有5个变量的多个配置。
答案 0 :(得分:1)
您可能对regular expressions感兴趣。见http://docs.php.net/pcre
e.g。
<?php
$givenString="something else 12 with more 1234s";
$patterns = [
"!something%var1%aaa!",
"!something else (\d+) with more (\d+)s!"
];
foreach($patterns as $idx=>$p) {
if ( preg_match($p, $givenString, $matches) ) {
echo $idx, ' match: [', join('] [', $matches), "]\r\n";
}
}
打印
1 match: [something else 12 with more 1234s] [12] [1234]
答案 1 :(得分:1)
为什么不使用preg_match?这应该很简单,例如:
$matches = array();
preg_match("/^something else (\d+) with more (\d+)s$/", $givenString, $matches);
在此运行之后,$ matches [1]将包含()中包含的第一个匹配,即MyVar,$ matches [2]将包含()中的第二个匹配,即变量等。