|
|
|
| Здравствуйте, уважаемый коллектив SoftTime и форумчане! :)
Пишу здесь впервые :) раньше только читал :)
Регулярные выражения даются пока с трудом, но кое-как я все же их составлял :) Но вот новая проблема все-таки заставила меня создать эту тему.
Итак, переменная $text имеет значение равное строке с набором слов, помещенных через запятую:
$text="Nokia6630,смартфоны,загрузки,контент";
|
Причем количество слов может меняться.
Необходимо написать регулярное выражение, которое:
а) удовлетворяло бы такому написанию слов и запятых;
б) не пропускало написание двух слов между запятыми, прочие знаки и символы (пробелы до-после запятой, перед первым словом и в конце последнего, запрет на окончание-начало строки с запятой и т.д.);
Я начал писать РВ следующим образом:
$pattern="/[0-9a-zа-я][^\s],[^\s][0-9a-zа-я]/i";
|
Но такое выражение проверяет только первые два слова и ориентируется только на них, остальные же могут содержать пробелы и прочее.
Помогите, пожалуйста, грамматно написать регулярное выражение.
Пока писал все это, подумал, что для пробелов можно использовать trim-функции :)
Заранее спасибо! | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 17:29)
| | $pattern="/^([0-9a-zа-я]+)([,][0-9a-zа-я]+)*$/i"; | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 17:48)
| | Спасибо...
Но это выражение не работает... | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 18:06)
| | Большое спасибо!!!!
Сделал так:
$pattern="/^([0-9a-zа-я][^\s]+)([,][^\s][0-9a-zа-я]+)*$/i";
И работает :) | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 18:31)
| | Хм... Все хорошо, но выражение допускает написание запятой в конце строки, что мне не нужно...
Как это можно исправить? | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 18:56)
| | предложенное мной - не допускало. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 19:18)
| | Trianon, а вы сами пробовали проверить таким (вами предложеным) выражением? Оно не то, что запятую в конце не допускает, она даже на верную строку пишет не "соответствие". :)
Второй же вариант не допускает написание пробелов в любой части строки (перед-после запятой, в начале-конце строки), а также запятую в начале строки. Но! Разрешает писать запятую в конце и две подряд, что мне не нужно :)
Вот тут я опять застрял :) | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 19:37)
| | > Trianon, а вы сами пробовали проверить таким (вами предложеным) выражением?
<?
$pattern="/^([0-9a-zа-я]+)([,][0-9a-zа-я]+)*$/i";
$text="Nokia6630,смартфоны,загрузки,контент,";
echo preg_match($pattern, $text);
?>
выводит 0
|
<?
$pattern="/^([0-9a-zа-я]+)([,][0-9a-zа-я]+)*$/i";
$text="Nokia6630,смартфоны,загрузки,контент";
echo preg_match($pattern, $text);
?>
выводит 1
|
<?
$pattern="/^([0-9a-zа-я]+)([,][0-9a-zа-я]+)*$/i";
$text="Nokia6630";
echo preg_match($pattern, $text);
?>
выводит 1
|
Где не работает? | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 20:11)
| | Или у меня какой-то не такой php или у вас чего-то не так :)
при:
$pattern="Nokia6630";
выводит: 1
при:
$pattern="Nokia6630,смартфоны, загрузки,контент";
выводит: 0
при:
$pattern="Nokia6630,смартфоны, загрузки,контент,";
выводит: 0
:) и как это можно объяснить? :)
РВ переписал символ в символ, так что син.ошибку исключаем... | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 20:29)
| | Локаль стоит неправильная, например.
Уберите модификатор i и добавьте диапазоны заглавных букв. Как вариант.
У меня всё ОК - don't worry!
. Как минимум в плане регекспов. :) | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 20:47)
| | Спасибо! :) попробую. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 20:47)
| | >Локаль стоит неправильная, например.
Попробовал поставить локаль:
setlocale (LC_CTYPE, 'ru_RU.UTF-8');
убрал модификатор i, проставил диапазоны букв в верхнем регистре и... Ничего :(
все по-прежнему...
Что еще может быть причиной? | |
|
|
|
|
|
|
|
для: kzone
(17.04.2007 в 20:22)
| | utf-кодировка - многобайтовая кодировка с переменным размером символа.
Честно скажу - умеет ли работать preg-движок с utf-локалью - для меня самого загадка.
Если есть знающие товарищи, сам бы с удовольствием их послушал. | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2007 в 20:32)
| | >Честно скажу - умеет ли работать preg-движок с utf-локалью - для меня самого загадка.
что же, будем ждать :) может кто-нибудь и просветит. :) | |
|
|
|
|
|
|
|
для: kzone
(17.04.2007 в 20:37)
| | Существует модификатор "/u", позволяющий регулярным выражениям обрабатывать строки как UTF8. | |
|
|
|
|
|
|
|
для: Саня
(17.04.2007 в 20:54)
| | Всем огромное спасибо!!!!
Все прекрасно работает с этим волшебным модификатором /u :) !!!! Спасибо Саня!
Trianon, ваше РВ работает на 5 :) Большое вам спасибо! Знайте теперь, что для работы с utf-8 нужно использовать этот замечательный модификатор и без локалей :) | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 18:06)
| | Работает. Как минимум на Вашем примере. | |
|
|
|
|
|
|
|
для: Trianon
(13.04.2007 в 19:27)
| | у меня - нет :) | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 19:53)
| | $text = explode (',', $text);
и проверяйте элементы по очереди :) | |
|
|
|
|
|
|
|
для: bronenos
(16.04.2007 в 18:36)
| | :) спасибо, конечно, но хочется регулярными выражениями :)
вот руки до компьютера дойдут и сделаю все что надо :) | |
|
|
|
|
|
|
|
для: kzone
(13.04.2007 в 19:53)
| | kzone, текст в UTF-8 небось? | |
|
|
|
|
|
|
|
для: Unkind
(16.04.2007 в 20:41)
| | ну, а в чем же еще? :)))
а что? Это как-то влияет? | |
|
|
|