2

これはすでに質問されて回答されていると確信していますが、かなり検索して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  
4

3 に答える 3

7

基本的にアナグラムをチェックしています。文字列を並べ替えて、等しいかどうか比較してみませんか?

$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);
}

コードインアクション

于 2010-10-28T17:23:52.250 に答える
0

正規表現を使用する代わりに、各文字を文字に変換して並べ替え、2 つの文字列が等しいことを確認できます。

于 2010-10-28T17:24:41.980 に答える
0

これで正規表現を使用するかどうかはわかりません。すべての手紙に昔ながらの find ステートメントを使用したいと思うでしょう。

于 2010-10-28T17:23:39.970 に答える