我很惊讶我在网上找不到这个,包括stackoverflow。我正在寻找要在 PHP 函数中使用的正则表达式preg_replace来实现这一点:
找到文本中"a"后跟元音的任何部分,并按照英语语法规则将"a"转换为"an"。
例如:
"一个苹果"将转换为"一个苹果"。
"冰屋"将转换为"冰屋"。
等等。
理想情况下,该函数不区分大小写。真正令人印象深刻的是,如果它能保留原来的大小写,例如"A"将被转换为"An",而下一个单词的大小写将被保留,例如"一个美国人"最终不会成为"一个美国人"。
这似乎正是正则表达式的理想选择,很多人会发现有用,但我无法弄清楚。如果能得到一些帮助,将不胜感激。
我目前正在尝试这个:
preg_replace("/ a?i ([aeio])?i/", "an $1", $string)
正如评论者正确指出的那样,这不会完全解决 a/an 的问题,因为它基于声音而不仅仅是字母。但是,我仍然认为在"每一点帮助"的基础上都是值得的,因为它纠正了大多数此类问题,从而节省了一些人工编辑时间。
我的模式如下,尽管上面评论中的问题(re:u)更加棘手。
preg_replace('/'b(a)'s+([aeiou])/i', '$1n $2', $source_string);
当然,如果你是唯一的麻烦信,你可以赌一把,在 u 跟随的情况下信任源字符串,只需将其从模式中删除:/'b(a)'s+([aeio])/i