匹配可能以首字母或缩写格式出现的短语

问题描述 投票:0回答:2

正则表达式是否可以匹配字符串中单词的首字母?示例:

我想匹配,比如说,

International Scrabble Association
,但它可以是
ISA
Intl. Scrabble Assoc.
等。理想情况下,它们都会匹配
ISA

regex pattern-matching cpu-word abbreviation
2个回答
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.

这是 ideone 如果你想尝试一下。


0
投票

我无法推测“.etc”中会合理包含哪些额外的白名单字符串,因此我只能构建一个模式来验证您明确指定的字符串。

以下模式使用一系列包含在非捕获组以及单词边界中的交替和可选子模式,以防止进行单词中间/意外匹配。

代码:(演示

$tests = [
  'International Scrabble Association',
  'ISA',
  'Integrated Star Aloha',
  'Intl. Scrabble Assoc.',
];

$regex = <<<REGEX
    /
    \b
    I(?:nt(?:l\.|ernational)\s+)?
    S(?:crabble\s+)?
    A(?:\b|ssoc(?:\.|iation\b))
    /x
REGEX;

foreach ($tests as $test) {
    printf(
        "%36s : %s\n",
        $test,
        preg_match($regex, $test) ? '✅' : '❌'
    ); 
}

输出:

  International Scrabble Association : ✅
                                 ISA : ✅
               Integrated Star Aloha : ❌
               Intl. Scrabble Assoc. : ✅
© www.soinside.com 2019 - 2024. All rights reserved.