我試圖解析通過我的項目文件包含全局變量,其中一些文件有多個全局變量給他們。在其他全局變量之間匹配PHP全局變量
例子:
global $ID, $NR, $USER;
global $NR;
我只能找到它們之間的$NR
變量。
我正則表達式:
global[?\w+($NR)+\s+?]
此找到了很多的全局變量,而不是NR $。怎麼了?
我試圖解析通過我的項目文件包含全局變量,其中一些文件有多個全局變量給他們。在其他全局變量之間匹配PHP全局變量
例子:
global $ID, $NR, $USER;
global $NR;
我只能找到它們之間的$NR
變量。
我正則表達式:
global[?\w+($NR)+\s+?]
此找到了很多的全局變量,而不是NR $。怎麼了?
您可以使用
^\s*global\s*\$\w+(?:,\s*\$\w+)*;$
這個表達式將捕獲所有的全局不論是多次變量聲明或單。
正則表達式說明:
^
:零或多個空格global
:行\s*
的開始匹配的確切字符串全球\$
:匹配$
符號。由於$
在RegEx中有不同的含義,它需要通過前面的反斜槓進行轉義以實現字面匹配。\w+
:匹配一個或多個字母數字字符和_
字符。 \w
= [a-zA-Z0-9_]
(?:,\s*\$\w+)*
(?:...)
:非capturging組,
:匹配,
符號\s*
:匹配零個或多個空格字符(...)*
:匹配組零次或多次。;
:比賽;
符號$
:行添加正則表達式鐵路圖更好地理解結束。
注:如果有分號後尾隨空格,分號後$
前添加\s*
。
您是如何生成鐵路圖的? –
@PatrickMlr [Atom RegEx Railroad Diagram Plugin](https://atom.io/packages/regex-railroad-diagram)。您也可以創建[在線](https://regexper.com/#%5E%5Cs*global%5Cs*%5C%24%5Cw%2B(%3F%3A%2C%5Cs *%5C%24%5Cw %2B)*%3B%24)。 – Tushar
[它真的找到任何東西](https://regex101.com/r/pC7oK5/1)? –
['^ \ s * global \ s * \ $ \ w +(?:,\ s * \ $ \ w +)*; $'](https://regex101.com/r/wK2hB2/1) – Tushar
@WiktorStribiżew這將找到所有的全局變量沒有$ NR – Nico