3

我想匹配以下字符串的模式:( 字符串是动态的,意味着我从 html 表单的请求中获取它,所以它可能每次都是新的,但字符串的格式总是相同的)

实际上我想要每个请求中可能不同的关键字(姓名,薪水,帐户)

$str="$(name) is $(salary) and $(account)";
if(preg_match_all("/\$\((.+?)\)/is",$str,$arrmsgvar,PREG_SET_ORDER)){
    echo "<pre>";
    print_r($arrmsgvar);
    echo "</pre>";
}

我正在编写正则表达式以匹配该模式但没有成功。有人能告诉我上述代码的正确正则表达式吗?

4

2 回答 2

3

您的正则表达式(如果您想确定,也可以搜索字符串)应该用单引号引起来。

使用双引号,PHP 将您的正则表达式解释为:

/$\((.+?)\)/
 ^
missing backslash here

这段代码应该可以正常工作。

<?php

$str='$(name) is $(salary) and $(account)';
if(preg_match_all('/\$\((.+?)\)/',$str,$arrmsgvar,PREG_SET_ORDER)){
    echo "<pre>";
    print_r($arrmsgvar);
    echo "</pre>";
}

证明

于 2013-04-24T09:21:56.407 回答
0

此正则表达式将返回一个包含三个值的数组

"/\$\((\w+)\)/"

preg_match_all("/\$\((\w+)\)/",$str,$arrmsgvar);

Array
(
[0] => Array
    (
        [0] => $(name)
        [1] => $(salary)
        [2] => $(account)
    )

[1] => Array
    (
        [0] => name
        [1] => salary
        [2] => account
    )

)
于 2013-04-24T09:19:10.000 回答