2016-09-16 153 views
-1

我試圖解析通過我的項目文件包含全局變量,其中一些文件有多個全局變量給他們。在其他全局變量之間匹配PHP全局變量

例子:

global $ID, $NR, $USER; 
global $NR; 

我只能找到它們之間的$NR變量。

我正則表達式:

global[?\w+($NR)+\s+?] 

此找到了很多的全局變量,而不是NR $。怎麼了?

+0

[它真的找到任何東西](https://regex101.com/r/pC7oK5/1)? –

+0

['^ \ s * global \ s * \ $ \ w +(?:,\ s * \ $ \ w +)*; $'](https://regex101.com/r/wK2hB2/1) – Tushar

+0

@WiktorStribiżew這將找到所有的全局變量沒有$ NR – Nico

回答

2

您可以使用

^\s*global\s*\$\w+(?:,\s*\$\w+)*;$ 

這個表達式將捕獲所有的全局不論是多次變量聲明或單。

正則表達式說明:

  1. ^:零或多個空格
  2. global:行
  3. \s*的開始匹配的確切字符串全球
  4. \$:匹配$符號。由於$在RegEx中有不同的含義,它需要通過前面的反斜槓進行轉義以實現字面匹配。
  5. \w+:匹配一個或多個字母數字字符和_字符。 \w = [a-zA-Z0-9_]
  6. (?:,\s*\$\w+)*
    • (?:...):非capturging組
    • ,:匹配,符號
    • \s*:匹配零個或多個空格字符
    • (...)*:匹配組零次或多次。
  7. ;:比賽;符號
  8. $:行

RegEx101 Demo

添加正則表達式鐵路圖更好地理解結束。

RegEx Railroad Diagram

注:如果有分號後尾隨空格,分號後$前添加\s*

+0

您是如何生成鐵路圖的? –

+1

@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