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