2014-01-15 32 views
0

我需要將所有西里爾字符替換爲「[]」括號之間的拉丁等價物。下面是例如:preg_replace括號內的所有西里爾文字符

Приметимо да 
формула (\ref{ј5121}) обухвата 
и случајеве а) и б). 
Заиста, из (\ref{ј5121}), за $x_1=x_2$ 
добија се: 
\[ 
|АБ|=\sqrt{(y_2-у_1)^2}=|y_2-п_1|, 
\] 
а из (\ref{ј5121}), за $y_1=y_2$: 
\[ 
|AЦ|=\sqrt{(м_2-х_1)^2}=|н_2-x_1|. 
\] 

Стога се формула (\ref{ј5121}) може 
применити на било које 
двe тачке, без обзира 
на њихов положај. 

我已經設法與此代碼的括號內的內容中分離: $圖案= 「/ [(^)] *)] /」; preg_match_all($ pattern,$ string,$ output);

但我只是不能讓它用拉丁字母替換西里爾文字符:\歡迎任何形式的幫助。謝謝!

+0

的問題是,西裏爾字母不必總是一個字母相當於拉丁字母(例如:'Ц '=>'TS')。如果你用'| ATS |'替換'| Avor |',你的數學表達式就沒有意義了。 –

回答

2

您可以使用此:

$data = <<<'LOD' 
Приметимо да 
формула (\ref{ј5121}) обухвата 
и случајеве а) и б). 
Заиста, из (\ref{ј5121}), за $x_1=x_2$ 
добија се: 
\[ 
|АБ|=\sqrt{(y_2-у_1)^2}=|y_2-п_1|, 
\] 
а из (\ref{ј5121}), за $y_1=y_2$: 
\[ 
|AЦ|=\sqrt{(м_2-х_1)^2}=|н_2-x_1|. 
\] 
LOD; 

$pattern = '~(?<=\[)[^]]++(?=])~u'; 

$result = preg_replace_callback($pattern, function ($m) { 
    $cyrillic2latin = array(
     'A'=>'A', 'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 
     'Ё'=>'YO', 'Ж'=>'ZH', 'З'=>'Z', 'И'=>'I', 'Й'=>'J', 'К'=>'K', 
     'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R', 
     'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Х'=>'H', 'Ц'=>'TS', 
     'Ч'=>'CH', 'Ш'=>'SH', 'Щ'=>'SHCH', 'Ъ'=>'\'', 'Э'=>'E', 'Ю'=>'YU', 
     'Я'=>'YA'); 
    return strtr($m[0], $cyrillic2latin); 
}, $data); 
print_r($result); 

隨時糾正它,並添加小寫字母!

如果您使用PHP> = 5.4.0,您可以將功能更改爲:

$result = preg_replace_callback($pattern, function ($m) { 
    return transliterator_transliterate("Cyrillic-Latin", $m[0]); 
}, $data); 
+0

是的,這有很大的幫助:)謝謝! –