2014-01-27 55 views
0

我想寫一個正則表達式,下面的例子只會匹配$ session = $ _POST ['session'];正則表達式檢測PHP中的全局變量

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

以下的正則表達式可以正常工作僅與第二行:

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

在第一行這個表達式不匹配

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

回答

1

我想象你正則表達式竟然出現了.*,而不是僅僅.

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

.* s是g因爲它們匹配任何東西,並且儘可能多地匹配,所以它們非常危險(在匹配方面)。從快速谷歌我看到

有效的變量名稱以字母或下劃線開頭,後面跟着任意數量的字母,數字或下劃線。

所以我建議限制匹配最多是字母,數字和下劃線的組合(方便地全部由\w覆蓋)。然後,我建議將第二個.*更改爲只匹配字符,直到下一個;使用[^;]+以避免表達式尾部的過度匹配,而不是使用.來匹配空格,而是使用\s*明確地匹配空格。留給你:

(\$\w+)\s*=\s*(\$_POST[^;]+); 

RegExr Example

0

你可以嘗試:

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

同意,這可能是所有OP想要,但如果你之前刪除空白的''{在1號線,這將仍然匹配不當 – OGHaza

+0

@OGHaza謝謝,我知道用'$ _POST'改進編輯我的答案。 – hsz