我正在研究一个应该这样工作的翻译函数:_('{en:} hello {nl:} hoi') 但是我在编写正确的正则表达式时遇到了麻烦。到目前为止,我有这段代码:
preg_match('/\{([a-zA-Z_]{2,4}):\}(.*)/', $translate, $matches);
for ($i = 0; $i < count($matches) / 2; $i + 2)
{
$return .= '<!--:' . $matches[$i] . '-->' . $matches[$i + 1] . '<!--:-->';
}
但我的匹配数据包含这个:
array
0 => string '{en:}hello{nl:}hoi' (length=23)
1 => string 'en' (length=2)
2 => string 'hello{nl:}hoi' (length=18)
正确的正则表达式的任何想法?或者甚至是更好的解决方法?
答案 0 :(得分:1)
我不确定该函数应返回什么,因此以下函数将返回一个关联数组,其中语言为键,文本为值:
function _($translate)
{
$result = array();
if (preg_match_all('/\{(.+?):\}([^{]+)/', $translate, $matches))
{
for ($i = 0, $len = count($matches[0]); $i < $len; ++$i)
{
$result[$matches[1][$i]] = $matches[2][$i];
}
}
return $result;
}
示例:
print_r(_('{en:}hello{nl:}hoi'));
以上示例将输出:
Array
(
[en] => hello
[nl] => hoi
)
答案 1 :(得分:0)
我认为您要更改(。*)以使其与字符{
不匹配:
/\{([a-zA-Z_]{2,4}):\}([^{]*)/