我正在尝试编写一个正则表达式,在下面的示例中只能与 $ session = $ _POST ['session']匹配;
Line #1: if (isset($_POST['session'])) {$session = $_POST['session'];}
Line #2: $session = $_POST['session'];
以下正则表达式仅适用于第二行:
(适用\ $ 。)= (\ $ _ POST *);
在第一行,此正则表达式与
匹配$_POST['session'])) {$session = $_POST['session'];
答案 0 :(得分:1)
我想你的正则表达式实际上只有.*
而不是.
(\$.*)=.(\$_POST.*);
^
.*
通常非常危险(就过度匹配而言)因为它们匹配任何东西,并且尽可能多。从快速谷歌我看到
有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。
所以我建议将匹配最多限制为字母,数字和下划线的组合(方便地全部由\w
覆盖)。然后,我建议您使用.*
将第二个;
更改为仅匹配下一个[^;]+
的字符,以避免表达式的尾端过度匹配,而不是使用{{ 1}}匹配空格,明确地将空格与.
匹配。离开你:
\s*
答案 1 :(得分:0)
您可以尝试:
(\$[^$= ]*) ?= ?(\$_POST\[[^]]*\])