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

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】:

作为使用正则表达式的替代方法,您可以将每个字母转换为一个字符,然后对它们进行排序并检查两个字符串是否相等。

【讨论】:

以上是关于必须包含字符串中所有字符的正则表达式匹配的主要内容,如果未能解决你的问题,请参考以下文章

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

求一js 正则表达式 要求必须包含汉字 谢谢

必须包含数字、字母、特殊字符三种的正则?

js正则判断一个字符串里必须包含大写字母,小写字母,数字,特殊字符? 必须包含其中三项,求教

Java正则表达式匹配字符串中的所有单词

js正则表达式的问题:要求一个字符串只能包含数字、大小写字母、“-”和“;”,而且结尾必须是“;”