2010-04-13 46 views
5

是否可以構造一個只能匹配列表中每個字母一次的PCRE樣式正則表達式?正則表達式只能使用每個字母一次?

例如,如果你有字母「lrsa」,並嘗試對匹配的單詞列表:

^[lrsa]*m[lrsa]*$ 

你要匹配「拉姆塞」(有效),也有「喇嘛」(對我們的目的無效,因爲你只有一個「a」)。如果你的信件集是「lrsaa」,你會想要匹配「喇嘛」。

這是可能的正則表達式,或者我應該以編程方式處理它?

+0

這究竟會不會爲'[lrsaa]工作'等於'[lrsa]'。 – Gumbo 2010-04-13 16:53:24

+1

對,這是我的問題。例如,您可以限制[lrsa] {4},但仍然會匹配「lass」。 – gtcaz 2010-04-13 16:55:20

+0

你可以做的是匹配你想要的和你不需要的一些額外的東西。通過迭代你的匹配,過濾掉不需要的額外信息將是微不足道的。 – erisco 2010-04-13 17:00:48

回答

3

可以使用負前瞻:

^(?!.*?(.).*?\1)[lrsa]*m[lrsa]*$ 

會做你想要

+1

是的,每個字母都是獨一無二的。很有幫助。 (我需要對它進行排序並且說明它是如何工作的。閱讀這個以及:http://stackoverflow.com/questions/1749437/regular-expression-negative-lookahead) 那裏有多個發生一封信,例如:「abbcde」,你想匹配「寶貝」而不是「dade」?可能? – gtcaz 2010-04-13 17:49:12

+0

我不確定我是否正確地理解了你,但也許這會做訣竅:'^(?!。*?(d)。*?\ 1)\ w + $' – ZyX 2010-04-14 02:45:11

相關問題