我想把所有的月都翻译成西班牙语,我正在用一月的时间试一试。守则如下:
if(preg_match('/^January\s\d+$/', $month)){
$pattern = '/^January$/';
$replace = '/^Enero$/';
preg_replace($pattern, $replace, $month);
}
return $month;它正在回归“一月”,而不是“埃内罗”。问题在哪里?
问候
发布于 2014-02-13 14:00:04
你从一个稍微错误的角度来处理这个问题。正则表达式不是将月份转换为不同语言的正确方法。如果要用正则表达式来完成这个任务,就必须使用几个if语句(或一个switch构造)来完成这个任务。对我来说,使用数组似乎是最好的方法。
如何获得公历月的西班牙等值
创建一个关联数组,其英文月名为键,其西班牙语等效值为值。现在,要获得西班牙月份名称,只需从定义的数组中访问相应的数组值:
$spanish_months = array(
'January' => 'enero',
'February' => 'febrero',
'March' => 'marzo',
'April' => 'abril',
'May' => 'mayo',
'June' => 'junio',
'July' => 'julio',
'August' => 'agosto',
'September' => 'septiembre',
'October' => 'octubre',
'November' => 'noviembre',
'December' => 'diciembre'
);
$month = 'January';
echo $spanish_months[$month]; // "enero"为什么regex解决方案不起作用
只有当字符串满足格式preg_match时,TRUE语句才会计算为month_name[space]date,但只有当模式为格式month_name时,preg_replace语句才会替换--格式永远不会相同。另外,替换字符串应该是字符串,而不是regex模式。
这可能就是你要找的东西:
$pattern = '/January\s*\d{2}/'; // '^' & '$' not necessary
if(preg_match($pattern, $month)){
$replace = 'Enero';
echo preg_replace($pattern, $replace, $month); // "Enero"
}我已经对匹配日期的正则表达式做了一些改进,但这仍然允许传递许多不正确的日期。如果你只是试着做实验,那就没问题了。否则,您应该使用DateTime类来验证日期和时间。
发布于 2014-02-13 13:50:54
最优雅的方法是使用英语月份创建数组,用西班牙语创建另一个数组,然后使用str_replace:replace
就像这样:
<?php
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);
?>发布于 2014-02-13 13:56:57
不要在最后锚定:
$pattern = '/^January/';替换不是正则表达式:
$replace = 'Enero';https://stackoverflow.com/questions/21756075
复制相似问题