是否可以構造一個只能匹配列表中每個字母一次的PCRE樣式正則表達式?正則表達式只能使用每個字母一次?
例如,如果你有字母「lrsa」,並嘗試對匹配的單詞列表:
^[lrsa]*m[lrsa]*$
你要匹配「拉姆塞」(有效),也有「喇嘛」(對我們的目的無效,因爲你只有一個「a」)。如果你的信件集是「lrsaa」,你會想要匹配「喇嘛」。
這是可能的正則表達式,或者我應該以編程方式處理它?
是否可以構造一個只能匹配列表中每個字母一次的PCRE樣式正則表達式?正則表達式只能使用每個字母一次?
例如,如果你有字母「lrsa」,並嘗試對匹配的單詞列表:
^[lrsa]*m[lrsa]*$
你要匹配「拉姆塞」(有效),也有「喇嘛」(對我們的目的無效,因爲你只有一個「a」)。如果你的信件集是「lrsaa」,你會想要匹配「喇嘛」。
這是可能的正則表達式,或者我應該以編程方式處理它?
可以使用負前瞻:
^(?!.*?(.).*?\1)[lrsa]*m[lrsa]*$
會做你想要
這究竟會不會爲'[lrsaa]工作'等於'[lrsa]'。 – Gumbo 2010-04-13 16:53:24
對,這是我的問題。例如,您可以限制[lrsa] {4},但仍然會匹配「lass」。 – gtcaz 2010-04-13 16:55:20
你可以做的是匹配你想要的和你不需要的一些額外的東西。通過迭代你的匹配,過濾掉不需要的額外信息將是微不足道的。 – erisco 2010-04-13 17:00:48