Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > ПРостенькая регулярка


Автор: MystDeim 2.8.2009, 20:24
Нужна регулярка срабатывающая на определённые слова или на пустоту.
Что-то вроде этого, но с последними скобками не могу определиться
Код

^(word1)|(word2)|([^.]*)$

Пробовал и просто пустую оставлять (), не работает...

Автор: Kallisto 2.8.2009, 21:01
Код

if ( preg_match("/(word1|word2|word3|word4|word5)/", $string) or strlen(trim($string))==0) exit("off");

Автор: MystDeim 2.8.2009, 22:35
Kallisto
Это всё понятно, нужно именно в одну регулярку запихнуть.

Автор: youri 3.8.2009, 08:20
и что не срабатывает?
Код

preg_match('/^word1|word2|$/', '', $m);
var_dump($m);

p.s. зачем вообще все те скобки?

Автор: Kallisto 3.8.2009, 09:53
В одном так:
Код

if ( preg_match("/((word1|word2|word3|word4|word5)|(^$))/", $string)) exit("off");

Автор: youri 3.8.2009, 09:56
ты изменил семантику regexp'а, хотя может ТС этого и хотел. Но скобки зачем?

Автор: MystDeim 3.8.2009, 10:50
youri, Такая, к сожалению, не работает, но насчёт скобок вы правы, можно без них.
У меня вот такая заработала: 
Код

$arr = array('', 'word1', 'word2', 'a', 'abcd');
foreach ($arr as $string) {
    preg_match('/^word1|word2|^$$/', $string, $matches);
    var_dump($matches);
}

Автор: Kallisto 3.8.2009, 14:07
Я привык чтобы все было очевидно.
Мухи отдельно - котлеты отдельно.

Автор: youri 3.8.2009, 14:26
MystDeim, двойное $$ точно не нужно. Кроме того твой вариант не работает на строке 'aword2'

я сам ошибся. Должно быть так
Код

preg_match('/^(word1|word2|)$/', $string, $matches);

или
Код

preg_match('/^word1$|^word2$|^$/', $string, $matches);

но так длиннее

p.s. предпочел бы на ты, если не против

Автор: MystDeim 3.8.2009, 16:07
youri, Спасибо, твой вариант работает!
Проблема решена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)