从字符串中提取参数

时间:2015-08-26 06:52:52

标签: php regex

我有问题,我不知道从哪里开始。

我有这样的模式列表:

$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个变量的多个配置。

2 个答案:

答案 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]将包含()中的第二个匹配,即变量等。

相关问题