0

文字列内の単語のイニシャルを正規表現で一致させることは可能ですか? 例:

たとえば、International Scrabble Association と一致させたいのですが、ISA、Intl. Scrabble Assoc. など。理想的には、それらはすべて ISA に一致します。

実行可能ですか?

4

1 に答える 1

1

ネイティブで正規表現のみで行う方法があるかどうかを尋ねている場合は、いいえ、それを行う方法はありません。文字列を分割してイニシャルを抽出し (おそらく正規表現を使用して)、そこから新しい正規表現を作成する必要があります。もちろん、ソリューションは実装によって異なりますが、PHP の例を次に示します。

<?php
    $str = "International Scrabble Assocation";
    preg_match_all('/\b(\w)\w*\b/i', $str, $matches);
    $regex = '/\b' . implode('\S*\s*', array_map(strtoupper, $matches[1])) . '\S*\b/';
    $tests = array('Intl. Scrabble Assoc.',
                   'Intl Scrabble Assoc',
                   'I.S.A',
                   'ISA',
                   'Intl. SA', 
                   'intl scrabble assoc',
                   'i.s.a.',
                   'isa',
                   'lisa',
                   'LISA',
                   'LI. S. A.');
    echo "The generated regex is $regex.\n\n";
    foreach ($tests as $test)
    {
        echo "Does '$test' match? " . (preg_match($regex, $test) ? 'Yes' : 'No') . ".\n";
    }
?>

出力:

The generated regex is /\bI\S*\s*S\S*\s*A\S*\b/.
Does 'Intl. Scrabble Assoc.' match? Yes.
Does 'Intl Scrabble Assoc' match? Yes.
Does 'I.S.A' match? Yes.
Does 'ISA' match? Yes.
Does 'Intl. SA' match? Yes.
Does 'intl scrabble assoc' match? No.
Does 'i.s.a.' match? No.
Does 'isa' match? No.
Does 'lisa' match? No.
Does 'LISA' match? No.
Does 'LI. S. A.' match? No.

あなたがそれをいじりたいなら、これがイデオンです。

于 2013-01-24T04:17:19.253 に答える