使用西里尔字符删除字符串中的所有非拉丁字符

时间:2013-08-21 16:35:22

标签: php regex latin cyrillic

我在使用正则表达式时遇到一些字符串清理问题...


我想:

1)如果第一个char是Cyrillic =>删除所有字符,直到第一个数字或字符串中的拉丁字符为
2)如果第一个字符是拉丁语=>将char保存到字符串

中的第一个西里尔字符

第一部分有模式:

$pattern = '/[(\s)(a-zA-Z0-9)(\№)(\_)(\-)(\.)(\/)(\s)(\,)(\')(\")(\*))^(\(\))]*\s/u';

但是对于第二部分,如果拉丁字符的位置是输入字符串的中间,我输出中没有...

有人可以帮我编辑正则表达式吗?

谢谢


例如($ in [必须在结果中]):


foreach($in as $item){    
    $matches = array();    
    $result = preg_match ($pattern, $item, $matches);    
    print_r($matches);    
} 

$in = array();    
$in[RZL 200 -200] = 'RZL 200 -200 литров, Накопительный электроводонагреватель';    
$in[EKH 50U-] = 'EKH 50U-Вертикальный электроводонагреватель 50 литров';    
$in[EKF 70U,] = 'EKF 70U, Суперплоский электрический водонагреватель -70 литров, Глубина=320 мм';    
$in[FF06 1/2"AA] = 'FF06 1/2"AA фильтр механической очистки ,на холодную воду.';    
$in[FF06 1"AA,] = 'FF06 1"AA, фильтр механической очистки на холодную воду.';    
$in[F76 S 1/2" AA (AB, AC, AD),] = 'F76 S 1/2" AA (AB, AC, AD), фильтр механической очистки , на холодную воду';    
$in[ProfiRoll-2000, 13,3-18,2, 2000] = 'ProfiRoll-2000, 13,3-18,2, 2000 Вт, Телый пол в цементно-песчаную стяжку';    
$in[ProfiMat 160-2,0] = 'ProfiMat 160-2,0 кв.м, 0,320 Вт';    
$in[№203 ,] = 'Набор №203 , Набор фильтрэлементов №203(A560,A-560E,Em,Ecp,A-575E,Em,Ecp)';    
$in[A-575Ep box MAX,] = 'A-575Ep box MAX, Система обратного осмоса, 5 ступеней очистки со встроенным баком, насосом повышения давления и индикатором качества воды, 380 л/сутки (Россия)';    
$in[1500 (] = 'Емкость из ПЭ 1500 (ЕЭЦ1500) л, цилиндрическая вертикальная для питьевой воды';    
$in[HLA-12R-B] = 'Алюминиевый радиатор HLA-12R-B';    
$in[SLH 25/L30 ST] = 'Система обогрева трубопроводов SLH 25/L30 ST';    
$in[FFH 400/12,0] = 'Нагревательный мат FFH 400/12,0';    
$in[AF11S-1A,B,С,D,E,F.] = 'AF11S-1A,B,С,D,E,F.Запасная сетка для F76S,СS,FK76CS и HS10S (от 1/2" до 11/4"), 100,20,50,200,300,500микрон';
$in[A-11 BE (BIG BLUE 10)] = 'Фильтр A-11 BE (BIG BLUE 10) В сборе с кронштейном,ключом и фильтрующим элементом,1 ступень очистки (механическая)';    
$in["TROPIX"] = 'Комплект "TROPIX" МНН-130-1 (1 кв. метр)';

1 个答案:

答案 0 :(得分:0)

你也许可以使用这个正则表达式:

^[^A-Z0-9№_,\/'"*().-]*\s*([A-Z0-9№_,\/'"*(). -]+)

它匹配字符串开头的任意数量的非拉丁字符,并在它看到一个(或更多)字符后捕获任何拉丁字符。

Regex101 demo

请注意,模式会检测到一些西里尔С