我确信这已经被问到并得到了答复,但是我真的找不到我的答案后再搜索Regex Tutorial。我要做的是匹配一个字符串,其长度与另一个字符串相同。例如,字符串“abcde”将匹配“edcba”但不匹配“abcdf”或“aabbc”或“abc”。
这是我最接近的测试代码,它使用了一个字符类,但是我无法弄清楚的是如何让regex基本上从一开始就迭代遍历每个字符匹配字符串:
$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
答案 0 :(得分:7)
基本上你正在检查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);
}
答案 1 :(得分:0)
我不确定你是否想在此使用正则表达式。我想你会想要为你的所有信件使用一个简单的旧陈述声明。
答案 2 :(得分:0)
作为使用正则表达式的替代方法,您可以将每个字母转换为字符然后对它们进行排序并检查两个标记是否相等。