正则表达式在PHP中检测全局变量

时间:2014-01-27 10:00:25

标签: regex

我正在尝试编写一个正则表达式,在下面的示例中只能与 $ session = $ _POST ['session']匹配;

Line #1: if (isset($_POST['session'])) {$session = $_POST['session'];}
Line #2: $session = $_POST['session'];

以下正则表达式仅适用于第二行:

(适用\ $ 。)= (\ $ _ POST *);

在第一行,此正则表达式与

匹配
$_POST['session'])) {$session = $_POST['session'];

2 个答案:

答案 0 :(得分:1)

我想你的正则表达式实际上只有.*而不是.

(\$.*)=.(\$_POST.*);
    ^

.*通常非常危险(就过度匹配而言)因为它们匹配任何东西,并且尽可能多。从快速谷歌我看到

  

有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。

所以我建议将匹配最多限制为字母,数字和下划线的组合(方便地全部由\w覆盖)。然后,我建议您使用.*将第二个;更改为仅匹配下一个[^;]+的字符,以避免表达式的尾端过度匹配,而不是使用{{ 1}}匹配空格,明确地将空格与.匹配。离开你:

\s*

RegExr Example

答案 1 :(得分:0)

您可以尝试:

(\$[^$= ]*) ?= ?(\$_POST\[[^]]*\])