DrP*_*dix 2 php regex string string-comparison anagram
我确信这已经被问到并得到了回答,但老实说,在搜索了一下并阅读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";
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
TRUE -> edcba
TRUE -> eeeee
FALSE -> fghij
TRUE -> fedcba
FALSE -> qqq
TRUE -> cbaed
TRUE -> cba
Run Code Online (Sandbox Code Playgroud)
当我真正想要的是:
TRUE -> edcba
FALSE -> eeeee
FALSE -> fghij
FALSE -> fedcba
FALSE -> qqq
TRUE -> cbaed
FALSE -> cba
Run Code Online (Sandbox Code Playgroud)
基本上你正在检查字谜.为什么不对字符串进行排序并比较相等?
$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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |