2017-04-13 34 views
0

我正在解決一個問題,我需要匹配目標字符串中給定單詞的不區分大小寫排列。需要正則表達式來匹配給定單詞的所有排列

例如:

字匹配:的cadA

目標串:ABRACADABRA

在此,可以在目標串S中找到2個可能的排列是科學院和的cadA。

我寫了這樣的事情:

String pattern = "" ; 

    for(char ch : word.toCharArray()){ 
     pattern = pattern + "(?=[\\s\\S]*(" + ch + "))" ; 
    } 
    pattern = "^" + pattern + "*$"; 

    Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE); 

它不工作。

+5

正則表達式對於這個任務來說是一個很差的匹配。如果你想要所有的排列,正則表達式應該包含所有的排列,而不是一個單詞。 – dasblinkenlight

+0

請參閱[此演示](http://ideone.com/Txkyrf)。 –

+0

你能告訴我如何通過一些代碼,我仍然在學習正則表達式 –

回答

0

正則表達式不是此任務的最佳工具。您必須爲每個輸入單詞生成一個新的正則表達式。並非不可能,但過於複雜。

您最好將目標單詞的字母排序,然後對輸入單詞的每個n長度子字符串進行排序,看看它們是否與排序的目標單詞匹配。

因此,給定目標單詞「cAda」,您將其排序爲「Aacd」。

用戶輸入「胡言亂語」

所以你把第4個字母串,「阿布拉」,排序它獲得「AABR」,並檢查對排序的目標。沒有匹配。然後採取「brAc」,對其進行分類並檢查。然後「Acad」等

有一些潛在的優化,以避免排序,但與小字符串他們可能無關緊要。

相關問題