2013-01-24 183 views
0

正則表達式匹配字符串中單詞的首字母縮寫嗎?例如:字符串首字母匹配正則表達式

我想匹配國際拼字遊戲協會,但它可以作爲ISA,國際。 Scrabble Assoc。等等。理想情況下,他們都會匹配ISA。

可以嗎?

回答

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. 

如果你要玩它Here's the ideone

+0

是的,問題是「僅限正則表達式」。謝謝你的回答。 – SxN

+0

其實,acheong,你激勵了我:這是一種方法:\ bI \ w {0,12}。? ?s \ W {0,7}? ?A當然,它將與Integrated Star Aloha相匹配,但在我的情況下,它是可以的。再次感謝。 – SxN

相關問題