必须包含字符串中所有字符的正则表达式匹配
Posted
技术标签:
【中文标题】必须包含字符串中所有字符的正则表达式匹配【英文标题】:Regex match that must contain all characters in a string 【发布时间】:2011-05-02 00:25:27 【问题描述】:我确定这已经被问及回答了,但老实说,在搜索了相当多的内容并阅读了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
【问题讨论】:
【参考方案1】:基本上你正在检查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
【讨论】:
卫生署!谢谢很有意义,我想我的思绪停留在正则表达式上,掉进了兔子洞。谢谢。【参考方案2】:我不确定您是否想在此使用 Regex。我认为您会希望对所有信件使用普通的旧 find 语句。
【讨论】:
【参考方案3】:作为使用正则表达式的替代方法,您可以将每个字母转换为一个字符,然后对它们进行排序并检查两个字符串是否相等。
【讨论】:
以上是关于必须包含字符串中所有字符的正则表达式匹配的主要内容,如果未能解决你的问题,请参考以下文章