|
|
|
| Добрый день!
Есть массив данных:
Листовая маска 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
Какая регулярка необходима для данного случая?
С уважением,
Василий | |
|
|
|
|
|
|
|
для: 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);
|
Ну или усложнить шаблон выражения. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: confirm
(10.02.2015 в 19:32)
| | | |
|
|
|
|
|
|
|
для: VasilyVB
(10.02.2015 в 18:42)
| | | |
|
|
|
|
|
|
|
для: Sfinks
(10.02.2015 в 21:38)
| | Спасибо большое! Так работает.
Единственно, если в тексте появляются знаки типа "/", "+", "(", ")", то работать перестает. Понятно, что это служебные символы, но как их исключить? | |
|
|
|
|
|
|
|
для: VasilyVB
(10.02.2015 в 22:05)
| | Экранируйте бэкслешем и добавьте во вторые квадратные скобки \/\+\(\) | |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: VasilyVB
(11.02.2015 в 09:28)
| |
/([a-z][a-z\d\s]+)\sspf/i
| результат будет в $1 | |
|
|
|
|
|
|
|
для: 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", то РВ не работает. Как обойти? | |
|
|
|
|
|
|
|
для: VasilyVB
(11.02.2015 в 15:48)
| |
/([a-z][a-z\d\s\(\)\/\+]+?)(?:\sspf|$)/im
|
| |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: VasilyVB
(11.02.2015 в 21:22)
| |
/([a-z][a-z\d\s\(\)\/\+]+?)(?:\sspf.*$|$)/im
|
P.S. Это последняя моя попытка | |
|
|
|
|
|
|
|
для: Sfinks
(11.02.2015 в 22:11)
| | Теперь получилось идеально! Спасибо! | |
|
|
|