必须包含字符串中所有字符的正则表达式匹配

问题描述:

我确定这已经被问及回答了,但是在搜索了很多内容并阅读了Regex Tutorial后,我实在找不到我的答案。我要做的是匹配一个字符串,它具有与另一个字符串相同的字符和长度。例如,一个字符串“ABCDE”将匹配“EDCBA”但是不匹配“ABCDF”“aabbc”“ABC”必须包含字符串中所有字符的正则表达式匹配

这是我最接近的测试代码,我使用了一个字符类,但我无法弄清楚的是如何让正则表达式基本上迭代遍历类中的每个字符开始匹配字符串的:

$string = 'abcde'; 
$array = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba'); 
foreach ($array as $match) 
{ 
    if (preg_match("/[$string]/i",$match)) 
     echo "TRUE -> $match"; 
    else 
     echo "FALSE -> $match"; 
} 

其中给出结果:

TRUE -> edcba 
TRUE -> eeeee 
FALSE -> fghij 
TRUE -> fedcba 
FALSE -> qqq 
TRUE -> cbaed 
TRUE -> cba 

当我真正想要的是:

TRUE -> edcba 
FALSE -> eeeee 
FALSE -> fghij 
FALSE -> fedcba 
FALSE -> qqq  
TRUE -> cbaed 
FALSE -> cba 

基本上你正在检查anagrams。为什么不对字符串进行排序并进行比较?

$string = 'abcde'; 
$string = str_sort($string); // sort the string. 
$array = array('edcba','eeeee','fghij','fedcba','qqq','cbaed','cba'); 
foreach ($array as $match) { 
     $match = str_sort($match); // sort each match. 
     if (strcmp($match,$string) == 0) // now string compare. 
       echo "TRUE -> $match\n"; 
     else 
       echo "FALSE -> $match\n"; 
} 

function str_sort($string) { 
// function to sort a string..not the best but works :) 
     $tmp = str_split($string); 
     sort($tmp); 
     return implode('',$tmp); 
} 

Code In Action

+0

DOH!谢谢你让我觉得很有意义,我想我的思想被卡在正则表达式中,然后掉下了兔子洞。谢谢。 – DrPerdix 2010-10-28 18:03:22

我不确定你会想在这里使用正则表达式。我想你会想为你的所有信件使用简单的旧查找语句。

提供替换使用正则表达式,你可以每个字母转换为字符,然后对它们进行排序,并检查两个strigns相等。