我需要两个音译阵列,
$latin = ['dž', 'lj', 'nj',
'a', 'b', 'c', 'č', 'ć',
'd', 'đ', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'r',
's', 'š', 't', 'u', 'v',
'z', 'ž',
'DŽ', 'LJ', 'NJ', 'Dž', 'Lj', 'Nj',
'A', 'B', 'C', 'Č', 'Ć',
'D', 'Đ', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'R',
'S', 'Š', 'T', 'U', 'V',
'Z', 'Ž'
];
$cyrillic = ['џ', 'љ', 'њ',
'a', 'б', 'ц', 'ч', 'ћ',
'д', 'ђ', 'e', 'ф', 'г',
'x', 'и', 'j', 'к', 'л',
'm', 'н', 'o', 'п', 'p',
'c', 'ш', 'т', 'y', 'b',
'з', 'ж',
'Џ', 'Љ', 'Њ', 'Џ', 'Љ', 'Њ',
'A', 'Б', 'Ц', 'Ч', 'Ћ',
'Д', 'Ђ', 'E', 'Ф', 'Г',
'X', 'И', 'J', 'K', 'Л',
'M', 'H', 'O', 'П', 'P',
'C', 'Ш', 'T', 'Y', 'B',
'З', 'Ж'
];
所以当我使用str_replace($ latin,$ cyrillic,$ string)时,效果很好。 但字符串可能是这样的:
$string = 'Today is {day_name} and time is {time}';
是否可以映射除花括号内的所有字符。
这是一个例子:
$string = 'Today is {day_name} and time is {time}';
echo str_replace($latin, $cyrillic, $string);
答案 0 :(得分:2)
使用
$arr = array_combine($latin, $cyrillic);
$string = 'Today is {day_name} and time is {time}';
echo preg_replace_callback('/\{[^}]*}(*SKIP)(*F)|./', function ($m) use ($arr) {
return array_key_exists($m[0], $arr) ? $arr[$m[0]] : $m[0];
},
$string);
请参阅IDEONE demo,结果:Toдay иc {day_name} aнд тиme иc {time}
。
在这里,我将两个数组合并为1个数组,其中包含键和值,然后匹配任何字符,但是换行符(= key)(添加/s
修饰符以匹配所有)并检查数组中是否存在键。如果是,请替换。
正则表达式匹配:
\{[^}]*}(*SKIP)(*F)
- 以{
开头的子字符串,后跟0 {+ 1}}以外的0个或更多字符,然后匹配结束}
,并从中忽略整个匹配的子字符串因动词}
(*SKIP)(*FAIL)
- 或...... |
- 任何字符,但换行符。答案 1 :(得分:1)
您可以使用preg_split
使用regex 通过$('#us3').locationpicker({
location: {latitude: lat, longitude: lon},
radius: 500,
zoom: 16,
inputBinding: {
//latitudeInput: $('#us3-lat'),
//longitudeInput: $('#us3-lon'),
radiusInput: $("#us3-radius")//,
//locationNameInput: $('#us3-address')
},
enableAutocomplete: true,
onchanged: function (currentLocation, radius, isMarkerDropped) {
// Uncomment line below to show alert on each Location Changed event
//alert("Location changed. New location (" + currentLocation.latitude + ", " + currentLocation.longitude + ")");
}
});
});});
封闭的字符拆分字符串 -
{}
然后有选择地应用字符串替换逻辑 像这样的东西 -
(\{[^}]*\})
输出 -
$string = "sad {day_name} and time is {time}";
// Split by the regex
$s_arr =preg_split(
"/({[^}]*})/",
$string,
-1,
PREG_SPLIT_DELIM_CAPTURE
);
// The string is split such that only odd numbers
// constitute the split value
foreach($s_arr as $k=>&$m){
if($k%2 === 0){
$m = str_replace($latin, $cyrillic, $m);
}
}
unset($m);
$resp_str = implode("", $s_arr);
echo $resp_str;