header.php文件
<?php
echo 'this is example '.$adv['name'].' , this is another.....';
main.php文件
<?php
if(preg_match('/$adv[(.*?)]/',file_get_contents('header.php'),$itext)){
echo $itext[1].'';
}
显示空
答案 0 :(得分:2)
这个正则表达式将起作用
/\$adv\[(.*?)\]/
你需要在它们之前使用\来转义符号$,[,] 因为它们在正则表达式中具有特殊含义
答案 1 :(得分:1)
这是一个更有效的解决方案:
模式(Demo):
/\$adv\[\K[^]]*?(?=\])/
PHP实施:
if(preg_match('/\$adv\[\K[^]]*?(?=\])/','this is example $adv[name]',$itext)){
echo $itext[0];
}
$itext
的输出:
name
请注意,通过使用\K
替换捕获组,目标字符串将在“完整字符串”匹配中返回,这有效地将输出数组减少了50%。
您可以看到演示链接以获取有关模式各个部分的说明,但基本上它与$adv[
匹配,然后重置匹配点,匹配方括号之间的所有字符,然后对结束正方形进行正向前瞻支架不包含在退回的比赛中。
无论您是否要匹配不同的变量名称,您都可以使用:/\$[^[]*?\[\K[^]]*?(?=\])/
。这将容纳adv
或美元符号后面的任何其他子字符串。通过使用Negated Character Classes
代替[^]]
代替.
来匹配无限制字符,正则表达式模式可以更有效地执行。
如果adv
不是输入字符串的决定性组成部分,我会使用/\$[^[]*?\[\K[^]]*?(?=\])/
因为它效率最高。