前一段时间,I asked for a function to convert a Spanish class names into plural forms:
function pluralize($element) {
return preg_replace('/^([A-Z][a-z]*)([A-Z]|$)/', '\1s\2', $element);
}
例如,代表发票项目行的类(西班牙语:líneadedetalle de la属factura )可以被称为LineaDetalleFactura
,其复数将是{{1} }。
现在,我想修改这个函数,考虑到通过添加“es”而不是“s”形成以辅音结尾的复数单词。
例如,代表付款单的类(西班牙语: orden de pago )可以称为LineasDetalleFactura
,其复数应为OrdenPago
。
关于如何使用正则表达式执行此操作的任何想法?
答案 0 :(得分:1)
这个问题不容易解决。使用正则表达式,您可以解决80-85%的案例。
换句话说,复数形式不会改变;复数危机也是危机。此外,以é结尾的单词也有例外情况; café的复数是cafés。
你也有自己的规则,如mamá和papá(复数形式是mamás和papás分别)。
最后,您需要正确调整重音的单词。例如, examen 的复数是exámenes(重音在 a 上)。
我在西班牙语here中找到了一个很好的多元化规则摘要,它可以帮助你。
最好的办法是建立例外及其复数形式的地图。然后,检查该列表中是否存在您正在复数的单词。如果是这样,你可以简单地从地图中获取它的复数。如果地图中不存在该单词,那么您可以应用复数规则来计算复数(我之前链接的页面应该帮助您)。困难的部分是建立例外清单;如果你可以缩小你的清单(即,排除不太可能使用的单词),那么你的工作将会更容易。
答案 1 :(得分:0)
使用此功能:
function pluralize($element) {
return preg_replace_callback('/^([A-Z][a-z]*)([A-Z]|$)/', function($args) {
// If the first word ends in consonant, append "e" first. After that, append "s".
return preg_replace('/([B-DF-HJ-NP-TV-Z])$/i', '\1e', $args[1]) . "s{$args[2]}";
}, $element);
}