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==" ) )