我很惊讶我在网上的任何地方都找不到这个,包括stackoverflow。我正在寻找在 PHP 函数 preg_replace 中使用的正则表达式来实现这一点:
找到文本中“a”后跟元音的任何部分,然后按照英语语法规则将“a”转换为“an”。
例如:
“一个苹果”将转换为“一个苹果”。
“a igloo”将转换为“an igloo”。
等等等等
理想情况下,该函数不区分大小写。真正令人印象深刻的是如果它可以保留原始大小写,例如“A”将转换为“An”,并且下一个单词的大小写将被单独保留,例如“an American”不会以“一个美国人”。
这似乎正是正则表达式最适合的事情,而且很多人会发现它很有用,但我想不通。将不胜感激这方面的一些帮助。
我目前正在尝试这个:
preg_replace("/ a?i ([aeio])?i/", "an $1", $string)
正如评论者正确指出的那样,这并不能完全解决 a / an 的问题,因为这是基于声音而不仅仅是字母。但是,我仍然认为在“每一点帮助”的基础上都是值得的,因为它纠正了大多数此类问题,从而节省了一些人工编辑时间。