2017-04-13 72 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”等

有一些潜在的优化,以避免排序,但与小字符串他们可能无关紧要。