2017-10-13 94 views
0

我有一個正則表達式:負向前查找故障正則表達式

^\/admin\/(?!(e06772ed-7575-4cd4-8cc6-e99bb49498c5)).*$ 

我的輸入字符串:

/admin/e06772ed-7575-4cd4-8cc6-e99bb49498c5 

據我所知,負前瞻應檢查組(e06772ed-7575-4cd4-8cc6-e99bb49498c5)有一個比賽,還是我不正確的?

由於輸入字符串具有組匹配,爲什麼負向預測不起作用?我的意思是,我希望我的正則表達式爲e06772ed-7575-4cd4-8cc6-e99bb49498c5以匹配輸入字符串e06772ed-7575-4cd4-8cc6-e99bb49498c5

消除負向預測使這個正則表達式正確工作。

Tested with regex101.com

+0

您似乎需要'(?!。* e06772ed-7575-4cd4-8cc6-e99bb49498c5 $)' –

+0

不是,您的正則表達式可以匹配任何用戶,我的正則表達式在管理員和UID相同時必須匹配,前瞻給出了這個結果。但我無法弄清楚爲什麼(因爲它應該與前瞻一起工作)。 – CrazySabbath

+0

這並不清楚:你需要匹配'/ admin/e06772ed-7575-4cd4-8cc6-e99bb49498c5'嗎? –

回答

1

這一問題的takeway消息爲:一個環視一個位置,而不是一個字符串匹配。

(?!e06772ed-7575-4cd4-8cc6-e99bb49498c5) 

將匹配的任何位置,也就是不隨後e06772ed-7575-4cd4-8cc6-e99bb49498c5

這意味着,認爲:

^\/admin\/(?!(e06772ed-7575-4cd4-8cc6-e99bb49498c5)).*$ 

將匹配:

/admin/abc 

,甚至:

/admin/e99bb49498c5 

但不是:

/admin/e06772ed-7575-4cd4-8cc6-e99bb49498c5/daffdakjf;adjk;af 

這正是解釋爲什麼只要你擺脫?!即可進行比賽。該字符串與完全匹配

接下來,你可以在你的lookahead中丟失圓括號,他們在這裏沒有他們通常的分組功能。

+0

一個很好的解釋。接受答案。 – CrazySabbath

+0

_接下來,你可以在你的lookahead中丟掉括號,他們在這裏沒有他們通常的分組功能。這不一定是真的,他們仍然捕獲並在其他情況下(因爲選擇的正則表達式引擎支持這個)反向引用和條件。在積極的預測中,您仍然可以訪問匹配結果和替換操作中的捕獲值。 –

+0

@SebastianProske具體。 –