正则表达式来搜索Gadaffi

我试图搜索Gadaffi这个词。 什么是最好的正则表达式来寻找这个?

我迄今为止的最佳尝试是:

b[KG]h?add?af?fi$b

但我似乎还缺少一些期刊。 有什么建议么?

更新:我在这里找到了一个相当广泛的列表:http://blogs.abcnews.com/theworldnewser/2009/09/how-many-different-ways-can-you-spell-gaddafi.html

下面的答案匹配所有30个变体:

Gadaffi
Gadafi
Gadafy
Gaddafi
Gaddafy
Gaddhafi
Gadhafi
Gathafi
Ghadaffi
Ghadafi
Ghaddafi
Ghaddafy
Gheddafi
Kadaffi
Kadafi
Kaddafi
Kadhafi
Kazzafi
Khadaffy
Khadafy
Khaddafi
Qadafi
Qaddafi
Qadhafi
Qadhdhafi
Qadthafi
Qathafi
Quathafi
Qudhafi
Kad'afi

b[KGQ]h?add?h?af?fib

阿拉伯语的转录是(维基说)“Qaḏḏāfī”,所以也许增加一个Q.和一个H(“Gadhafi”,正如文章所提到的)。

顺便说一句,为什么在正则表达式的末尾有一个$


顺便说一句,关于这个话题的不错文章:

卡扎菲,卡达菲还是卡扎菲? 为什么利比亚领导人的名字拼写了很多不同的方式?


编辑

要匹配后面提到的文章中的所有名称,这应该匹配所有的名称。 我们只希望它不会与其他许多东西相匹配:D

b(Kh?|Gh?|Qu?)[aeu](d['dt]?|t|zz|dhd)h?aff?[iy]b

简单... (Qadaffi|Khadafy|Qadafi| ... ) ...它是自我记录的,可维护的,并且假设您的regexp引擎实际上编译正则表达式(而不是解释它们),它会编译为相同的DFA,更混乱的解决方案会。

编写紧凑的正则表达式就像使用短变量名称来加速程序。 它只会帮助你的编译器死脑筋。


从您的潜在拼写列表中可以注意到一个有趣的事情是,包含列表中只有3个Soundex值(如果您忽略了异常值'Kazzafi')

G310,K310,Q310

现在,这里有误报('Godby'也是G310),但通过结合有限的metaphone命中,你可以消除它们。

<?
$soundexMatch = array('G310','K310','Q310');
$metaphoneMatch = array('KTF','KTHF','FTF','KHTF','K0F');

$text = "This is a big glob of text about Mr. Gaddafi. Even using compound-Khadafy terms in here, then we might find Mr Qudhafi to be matched fairly well. For example even with apostrophes sprinkled randomly like in Kad'afi, you won't find false positives matched like godfrey, or godby, or even kabbadi";

$wordArray = preg_split('/[s,.;-]+/',$text);
foreach ($wordArray as $item){
    $rate = in_array(soundex($item),$soundexMatch) + in_array(metaphone($item),$metaphoneMatch);
    if ($rate > 1){
        $matches[] = $item;
    }
}
$pattern = implode("|",$matches);
$text = preg_replace("/($pattern)/","<b>$1</b>",$text);
echo $text;
?>

一些调整,并可以说一些西里尔文音译,你会有一个相当强大的解决方案。

链接地址: http://www.djcxy.com/p/13397.html

上一篇: Regular expression to search for Gadaffi

下一篇: Simple regular expression for a decimal with a precision of 2