我不确定正则表达式是否是构建强大的比较工具的最佳方法。简单的正则表达式可能是更大解决方案的一部分,该解决方案使用更复杂的算法进行非精确匹配。
英语有多种现成的选项,其中一些选项可以相当简单地扩展到使用拉丁字母。这些算法中的大多数已经存在了数年甚至数十年,并且有详细的文档记录,尽管它们都有局限性。
我想非拉丁字母也有类似的算法,但我无法直接评论它们的可用性。
语音算法
The Soundex该算法已有近 100 年的历史,并已用多种编程语言实现。它用于根据字符串的发音确定数值。它并不精确,但对于识别发音相似的单词/音节可能很有用。我已经在 MS SQL Server 中尝试过它,并且它可以在 PHP 中使用。
http://php.net/manual/en/function.soundex.php
普遍共识(包括 PHP 文档)是,在处理英语时,Metaphone 比 Soundex 准确得多。有许多可用的实现(维基百科在文章末尾有一个很长的列表)并且它包含在 PHP 中。
http://www.php.net/manual/en/function.metaphone.php
Double Metahpone 支持与该单词的替代发音相对应的单词的第二种编码。
与 Metaphone 一样,Double Metaphone 已在许多编程语言中实现(example).
词解构
Levenshtein 可用于建议替代拼写(例如,规范用户输入),并且可能作为更细粒度的头韵和谐音算法的一部分很有用。
http://www.php.net/manual/en/function.levenshtein.php
从逻辑上讲,这将有助于理解字符串中单词的音节,以便可以解构每个单词。音节中断可以解决两个相邻字母应如何发音的歧义。该线程有几个链接:
PHP 音节检测