Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何指定匹配第一个结束括号,它总是匹配最后一个_Php_Regex_Preg Match - Fatal编程技术网

Php 如何指定匹配第一个结束括号,它总是匹配最后一个

Php 如何指定匹配第一个结束括号,它总是匹配最后一个,php,regex,preg-match,Php,Regex,Preg Match,我有一根这样的绳子- "UberMedia/".base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")."fon" 我想收集base64_decode()中的所有字符串,即本例中的以下三个字符串- 1. "RWNobw==" 2. "EWNobw==" 3. "TWNobw==" 我试过了 使用以下正则表达式- preg_match_a

我有一根这样的绳子-

"UberMedia/".base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")."fon"
我想收集base64_decode()中的所有字符串,即本例中的以下三个字符串-

1. "RWNobw=="
2. "EWNobw=="
3. "TWNobw=="
我试过了

使用以下正则表达式-

preg_match_all("/base64_decode\(\"(.*)\"\)/",$string,$matches);
我得到这个输出-

Array
(
    [0] => base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")
    [1] => RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==
)
您可以看到它与字符串中最后出现的
相匹配(跨越第一个和第三个base64_decode()函数)


如何更改它,以使base64_decode()的所有三个匹配项都被单独考虑,并且我可以获得上述三个字符串。

默认情况下,量词(
*
在本例中)将尽可能匹配。您可以使用惰性量词,而不是在其后面添加一个
,如:

base64_decode\("(.*?)"\)
或者更好地限制组的内容可以匹配,例如:

base64_decode\("([^"\s]*)"\)

这是您的问题的解决方案,我正在粘贴用于测试的代码

$string = '"UberMedia/".base64_decode("RWNobw==")."fon/Tablet/App/iOS/".base64_decode("EWNobw==")."fon/".base64_decode("TWNobw==")."fon"';

preg_match_all("/(base64_decode\(\"[A-Za-z0-9=]+\"\))/",$string,$matches);


print_r($matches);
将产生

排列 ( [0]=>阵列 ( [0]=>base64_解码(“RWNobw==”) [1] =>base64_解码(“EWNobw==”) [2] =>base64_解码(“TWNobw==”) )

)你需要的是

/(?<=base64_decode\()[^)]+(?=\))/
具体而言:

  • (?
    
    /(?<=base64_decode\()[^)]+(?=\))/
    
    Array
    (
    [0] => Array
        (
            [0] => "RWNobw=="
            [1] => "EWNobw=="
            [2] => "TWNobw=="
        )
    
    )