PHP和正则表达式在用元音开头的单词之前将“a”转换为“an”

时间:2012-08-11 04:11:09

标签: php regex string case grammar

我很惊讶我无法在网上找到这个,包括stackoverflow。我正在寻找在PHP函数preg_replace中使用的正则表达式来实现这个目的:

查找文本中“a”后跟元音的任何部分,并按照英语语法规则将“a”转换为“an”。

例如:

“苹果”将被转换为“苹果”。

“a igloo”将转换为“冰屋”。

等。等

理想情况下,该函数不区分大小写。真正令人印象深刻的是它是否可以保留原始案例,例如: “A”将被转换为“An”,并且下一个单词的情况将保持不变,例如, “美国人”不会最终成为“美国人”。

这看起来就像正则表达式一样理想,并且很多人会觉得有用,但我无法弄明白。将不胜感激为此提供一些帮助。

我正在尝试这个:

preg_replace("/ a?i ([aeio])?i/", "an $1", $string)

正如评论者正确地指出的那样,这并不能完全解决a / an的问题,因为它基于声音,而不仅仅是字母。但是,我仍然认为它在“每个小帮助”的基础上是值得的,因为它可以纠正大多数此类问题,从而节省了一些人工编辑时间。

1 个答案:

答案 0 :(得分:6)

我的模式如下,尽管上面评论中的问题(re:u)比较棘手。

preg_replace('/\b(a)\s+([aeiou])/i', '$1n $2', $source_string);

当然,如果你是唯一的麻烦信,你可以冒险,并且在你跟随的情况下信任源字符串,只需将其从模式中移除:/\b(a)\s+([aeio])/i