3 回答

TA貢獻1847條經驗 獲得超11個贊
否定的前瞻表示,在此位置,以下正則表達式無法匹配。
讓我們舉一個簡化的例子:
a(?!b(?!c))
a Match: (?!b) succeeds
ac Match: (?!b) succeeds
ab No match: (?!b(?!c)) fails
abe No match: (?!b(?!c)) fails
abc Match: (?!b(?!c)) succeeds
最后一個例子是雙重否定:它允許b后面跟一個c。嵌套的負前瞻變為正前瞻:c應該存在。
在每個示例中,僅a匹配。前瞻僅是一個條件,不會添加到匹配的文本中。

TA貢獻1809條經驗 獲得超8個贊
環顧四周可以嵌套。
所以這個正則表達式匹配“Drupal的6.14 /”是不是后面是“地王” 不跟著“/ all”或“/默認”。
令人困惑?使用不同的詞,我們可以說它與“ drupal-6.14 /”匹配,然后不跟“ sites”,除非再跟“ / all”或“ / default”

TA貢獻1802條經驗 獲得超4個贊
如果您這樣修改正則表達式:
drupal-6.14/(?=sites(?!/all|/default)).*
^^
...然后,它將匹配所有包含的內容drupal-6.14/,sites然后是或以外的其他 所有內容。例如:/all/default
drupal-6.14/sites/foo
drupal-6.14/sites/bar
drupal-6.14/sitesfoo42
drupal-6.14/sitesall
更改?=為?!匹配您的原始正則表達式將簡單地抵消那些匹配:
drupal-6.14/(?!sites(?!/all|/default)).*
^^
所以,這只是意味著drupal-6.14/現在不能被跟隨sites,隨后以外的任何 /all或/default。因此,現在,這些輸入將滿足正則表達式:
drupal-6.14/sites/all
drupal-6.14/sites/default
drupal-6.14/sites/all42
但是,從其他一些答案(可能還有您的問題)中可能看不出來的是,您的正則表達式也將允許其他輸入,drupal-6.14/后面緊跟其他內容sites。例如:
drupal-6.14/foo
drupal-6.14/xsites
結論:因此,您的正則表達式基本上說要包括其名稱以或以外的其他子目錄開頭的所有子目錄。drupal-6.14 sitesalldefault
- 3 回答
- 0 關注
- 611 瀏覽
添加回答
舉報