3

英単語のリストがあり、どの単語に特定の文字があり、それらの文字を 1 回だけ使用する必要があるかを調べたいと考えています。私はPHPを使用しています。

したがって、文字が「abcde」の場合、単語は「cab」、「bed」のようにする必要がありますが、「dad」ではありません。私の現在の試みは

if (preg_match("/([abcde]+)/i", $w))
    echo $w, "\r\n";

しかし、これは、「abcde」という文字の 1 つを含むすべての単語をリストしているだけです。それで、誰かがそれを行う方法を教えてもらえますか?

4

2 に答える 2

1

あなたはで試すことができます:

$letters     = str_split('abcde');
$wordLetters = str_split($w);

if ( count(array_intersect($letters, $wordLetters)) == count($wordLetters) ) {
  echo $w, "\r\n";
}
于 2013-01-17T11:06:07.117 に答える
1

各 $word に $letters 文字列の文字のみが重複せずに含まれているかどうかを識別するには

$letters = 'abcde';

$words = array(
    'cab',
    'bed',
    'dad'
);

foreach($words as $word) {
    $valid = testWord($word, $letters);
    echo $word, ' => ', (($valid) ? 'Yes' : 'No'), PHP_EOL;
}

function testWord($word, $letters)
{
    $kChars = array_intersect(
        str_split($letters),
        str_split($word)
    );

    return count($kChars) == strlen($word);
}
于 2013-01-17T11:03:49.823 に答える