Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отрезание части названия с кириллицей
 
 автор: VasilyVB   (10.02.2015 в 18:42)   письмо автору
 
 

Добрый день!

Есть массив данных:

Листовая маска SKIN79 10 Seconds Mask
Солнцезащитный лосьон SKIN79 Mild Sun Lotion
Набор сывороток SKIN79 New Turn Therapy Special Set

Нужно отсечь слова на кириллице и лишние пробелы перед английской фразой чтобы получилось следующее:

SKIN79 10 Seconds Mask
SKIN79 Mild Sun Lotion
SKIN79 New Turn Therapy Special Set

Какая регулярка необходима для данного случая?

С уважением,
Василий

  Ответить  
 
 автор: confirm   (10.02.2015 в 19:32)   письмо автору
 
   для: VasilyVB   (10.02.2015 в 18:42)
 

<?
$a 
= array(
    
'Листовая маска SKIN79 10 Seconds Mask',
    
'Солнцезащитный лосьон SKIN79 Mild Sun Lotion',
    
'Набор сывороток SKIN79 New Turn Therapy Special Set'
);

$a preg_replace('/[а-яё]/iu'''$a); 

print_r($a);


Лишние пробелы "перед" можно удалить при выводе элементов массива. Если не предполагается вывода, а удалить их надо то можно все по краям удалить, после обработки рег. выражением:

<?
$a 
array_map('trim'$a);


Ну или усложнить шаблон выражения.

  Ответить  
 
 автор: VasilyVB   (10.02.2015 в 21:12)   письмо автору
 
   для: confirm   (10.02.2015 в 19:32)
 

Мне регулярное выражение нужно а не блок кода.

У меня при выражении "[a-zA-Z\d ]+"
получается в результате массив с пустой строкой и пробелом перед отсеченной частью:
1)
2) SKIN79 10 Seconds Mask

Если из выражения убрать знак пробела "[a-zA-Z\d]+", то все слова получаются в виде массива, без пробелов:
1) SKIN79
2) 10
3) Seconds
4) Mask

Как получить вот так:
1) SKIN79 10 Seconds Mask

  Ответить  
 
 автор: Sfinks   (10.02.2015 в 21:37)   письмо автору
 
   для: confirm   (10.02.2015 в 19:32)
 

  Ответить  
 
 автор: Sfinks   (10.02.2015 в 21:38)   письмо автору
 
   для: VasilyVB   (10.02.2015 в 18:42)
 

/[a-z][a-z\d\s]+$/im

  Ответить  
 
 автор: VasilyVB   (10.02.2015 в 22:05)   письмо автору
 
   для: Sfinks   (10.02.2015 в 21:38)
 

Спасибо большое! Так работает.

Единственно, если в тексте появляются знаки типа "/", "+", "(", ")", то работать перестает. Понятно, что это служебные символы, но как их исключить?

  Ответить  
 
 автор: Sfinks   (10.02.2015 в 23:22)   письмо автору
 
   для: VasilyVB   (10.02.2015 в 22:05)
 

Экранируйте бэкслешем и добавьте во вторые квадратные скобки \/\+\(\)

  Ответить  
 
 автор: VasilyVB   (11.02.2015 в 09:28)   письмо автору
 
   для: Sfinks   (10.02.2015 в 23:22)
 

А как можно отсечь часть выражения?
Например в ниже указанном массиве отсечь все слова начиная с SPF:

SKIN79 Hot Pink Sun Protect Beblesh Pact SPF30/PA++
SKIN79 Diamond The Prestige BB Cream SPF25/PA++ 40гр
SKIN79 Super Plus Beblesh Balm (Vital Orange) SPF50/PA+++

так, чтобы получилось:

SKIN79 Hot Pink Sun Protect Beblesh Pact
SKIN79 Diamond The Prestige BB Cream
SKIN79 Super Plus Beblesh Balm (Vital Orange)

  Ответить  
 
 автор: Sfinks   (11.02.2015 в 12:44)   письмо автору
 
   для: VasilyVB   (11.02.2015 в 09:28)
 

/([a-z][a-z\d\s]+)\sspf/i
результат будет в $1

  Ответить  
 
 автор: VasilyVB   (11.02.2015 в 15:48)   письмо автору
 
   для: Sfinks   (11.02.2015 в 12:44)
 

Прошу прощения, я не верно указал условие ...
Если в фразе присутствует "SPF", то работает.

Полные начальные условия - в массиве присутствуют фразы где "SPF" может отсутствовать:

Набор сывороток SKIN79 New Turn Therapy Special Set
Солнцезащитный крем Skin79 Homme Active Sun Cream SPF50+ PA+++
Листовая маска SKIN79 Mask Sheet New
ББ крем SKIN79 Super Plus Beblesh Balm (Bronze) SPF50+/PA+++
ББ крем SKIN79 Super Plus Beblesh Balm (Purple) SPF40/PA+++ 40гр

Если в фразе нет "SPF", то РВ не работает. Как обойти?

  Ответить  
 
 автор: Sfinks   (11.02.2015 в 16:49)   письмо автору
 
   для: VasilyVB   (11.02.2015 в 15:48)
 

/([a-z][a-z\d\s\(\)\/\+]+?)(?:\sspf|$)/im

  Ответить  
 
 автор: VasilyVB   (11.02.2015 в 21:22)   письмо автору
 
   для: Sfinks   (11.02.2015 в 16:49)
 

Почему-то не берется в расчет "PA+++"

Результат:

Набор сывороток SKIN79 New Turn Therapy Special Set
Skin79 Homme Active Sun CreamPA+++
Листовая маска SKIN79 Mask Sheet New
ББ крем SKIN79 Super Plus Beblesh Balm (Bronze)PA+++
ББ крем SKIN79 Super Plus Beblesh Balm (Purple)

  Ответить  
 
 автор: Sfinks   (11.02.2015 в 22:11)   письмо автору
 
   для: VasilyVB   (11.02.2015 в 21:22)
 

/([a-z][a-z\d\s\(\)\/\+]+?)(?:\sspf.*$|$)/im

P.S. Это последняя моя попытка

  Ответить  
 
 автор: VasilyVB   (12.02.2015 в 13:29)   письмо автору
 
   для: Sfinks   (11.02.2015 в 22:11)
 

Теперь получилось идеально! Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования