說,如果我有一個DN字符串,像這樣:我可以在正則表達式中使用布爾AND條件嗎?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
如何使一個正則表達式來挑選只有那些既OU=Karen
和OU=admin
DNS?
說,如果我有一個DN字符串,像這樣:我可以在正則表達式中使用布爾AND條件嗎?
OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM
如何使一個正則表達式來挑選只有那些既OU=Karen
和OU=admin
DNS?
這是正則表達式前瞻的解決方案,整個字符串匹配如果它包含在短短的參考任何訂單所需的部件。如果你不存儲在某種配置變量的模式,我會跟nhahtdh的解決方案堅持,雖然。
/^(?=.*OU=Karen)(?=.*OU=admin).*$/
^ - line start
(?= - start zero-width positive lookahead
.* - anything or nothing
OU=Karen - literal
) - end zero-width positive lookahead
- place as many positive or negative look-aheads as required
.* - the whole line
$ - line end
不,除非你使用vi
:它有一個\&
操作
/(OU=Karen.*OU=admin|ou=admin.*OU=Karen)/
這可能是足夠接近,雖然,或類似的。
你意識到你沒有做一切有一個正則表達式,甚至一個正則表達式。
正則表達式對於捕獲輸入類非常有用,但是如果您有兩個完全固定的字符串,則可以對它們兩者使用類型的方法,然後使用and
結果。
另外,如果你需要使用正則表達式,你可以做那兩次(每個字符串一次)和and
結果在一起。
如果您需要一個單正則表達式來做到這一點,你可以嘗試這樣的:
,OU=Karen,.*,OU=admin,|,OU=admin,.*,OU=Karen,
但隨後你必須還擔心當這些節出現在開始或結束該行以及各種其他邊緣情況(開頭或結尾處的一個或兩個,彼此相鄰,名稱如Karen7
或administrator-lesser
等)。
有允許所有可能性將可能喜歡的東西怪異結束:
^OU=Karen(,[^,]*)*,OU=admin,|
^OU=Karen(,[^,]*)*,OU=admin$|
,OU=Karen(,[^,]*)*,OU=admin,|
,OU=Karen(,[^,]*)*,OU=admin$|
^OU=admin(,[^,]*)*,OU=Karen,|
^OU=admin(,[^,]*)*,OU=Karen$|
,OU=admin(,[^,]*)*,OU=Karen,|
,OU=admin(,[^,]*)*,OU=Karen$
雖然有先進的enouge正則表達式引擎,這可能是還原到更小的東西(儘管它不太可能只是因爲所有的前瞻性/後向追蹤都會更快)。
一種方式可以沒有複雜的正則表達式來提高就是按摩你的弦稍微前手,使邊界檢查不需要:
newString = "," + origString.replace (",", ",,") + ","
,使其開始,以逗號結尾以及其中的所有逗號是重複的:
,OU=Karen,,OU=Office,,OU=admin,,DC=corp,,DC=Fabrikam,,DC=COM,
然後你只需要檢查的要簡單得多:
,OU=Karen,.*,OU=admin,|,OU=admin,.*,OU=Karen,
這樣可以消除上述所有潛在的問題:
Karen2
意外匹配。也許最好方式做到這一點(如果你的語言允許)是簡單地分割字符串的逗號並檢查他們,是這樣的:
str = "OU=Karen,OU=Office,OU=admin,DC=corp,DC=Fabrikam,DC=COM"
elems[] = str.splitOn(",")
gotKaren = false
gotAdmin = false
for each elem in elems:
if elem = "OU=Karen": gotKaren = true
if elem = "OU=admin": gotAdmin = true
if gotKaren and gotAdmin:
weaveYourMagicHere()
這既忽略了它們可能出現的順序,並繞過可能需要檢測邊緣情況的任何正則表達式「體操」。
它也有可能比同等正則表達式:-)
您可以使用類似(OU \ =卡倫可讀性更強的優勢
嗨,歡迎來到Stack Overflow。這可能很好地回答了這個問題 - 但有點解釋總是一個好主意。 S/O上有許多新手可能會從你身上學到一兩樣東西,而對你來說可能是顯而易見的東西,對他們來說不會是什麼。 –
感謝您的解釋! – ahmd0