Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подскажите регулярное выражение. / 8 сообщений из 8, страница 1 из 1
29.10.2018, 08:01
    #39724248
Alex.Ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Добрый день коллеги.
Надо сделать регулярку которая буде выбирать последовательность любых не пробельных символов, при условии что там нет заданной строки. Типа \S если там нет 'XYZ'.

Спасибо.
...
Рейтинг: 0 / 0
29.10.2018, 10:09
    #39724297
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Код: php
1.
[^\sXYZ]+


?
...
Рейтинг: 0 / 0
29.10.2018, 10:37
    #39724318
Alex.Ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Hett, Спасибо за ответ. Пока нет возможности проверить, но вроде данная конструкция отрицает любой из символов XYZ а мне надо именно строку XYZ буквы по отдельности и даже XY YZ мне подходят.
...
Рейтинг: 0 / 0
29.10.2018, 12:00
    #39724391
Alex.Ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Так и есть. Выдает ложь если присутствует любая из букв X,Y,Z
...
Рейтинг: 0 / 0
29.10.2018, 14:25
    #39724511
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Код: php
1.
\S*[^\sX][^\sY][^\sZ]\S*

Как-то так?
...
Рейтинг: 0 / 0
29.10.2018, 15:46
    #39724595
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Хотя, это лишь частный случай. Если искомая строка менее трех символов, то мой вариант выше не сработает :(

Возможно, примерно в таком направлении подумать...
Код: php
1.
\S*[^\sX](([^\sY])?[^\sZ])?\S*
...
Рейтинг: 0 / 0
29.10.2018, 16:19
    #39724615
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Код: php
1.
2.
3.
4.
5.
$str = 'xyz abc xyz olala tututu';
$str2 = 'eee bbb xyz';
preg_match_all('/((?=[^ ])[^ xyz]+)/', $str, $m, PREG_SET_ORDER);
preg_match_all('/((?=[^ ])[^ xyz]+)/', $str2, $m2);
var_dump($m, $m2);
...
Рейтинг: 0 / 0
02.11.2018, 20:04
    #39727414
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите регулярное выражение.
Alex.Ru,

реализация условия AND в регулярных выражениях производится с помощью look around assertions .
Assertion - утверждение.
Их четыре типа.
Код: php
1.
2.
3.
4.
(?= буковки)     Lookahead            Позитивная опережающая проверка
(?<= буковки)	Lookbehind           Позитивная ретроспективная проверка
(?! буковки)	Negative Lookahead   Негативная опережающая проверка
(?<! буковки)	Negative Lookbehind  Негативная ретроспективная проверка


данный случай:
Код: php
1.
( непробельные символы) AND ( не XYZ )



реализация:
Код: php
1.
/^ (?=^ \S+ $) (?# AND) (?! .* XYZ) $/x



комментарий (?# AND) тут для наглядности, можно выбросить.

Если рассмотреть пример
Код: php
1.
2.
3.
$str = 'asdfghXY';
preg_match('/ (?= ^\S+$) (?! .* XYZ) /x', $str, $matches);
var_dump($matches);


то можно убедиться, что в $matches пусто, хотя preg_match вернёт true

Дело в том, что утверждения не двигают внутренний курсор механизма рег.выражений по исследуемой строке.

Чтобы в $matches оказалась совпавшая часть, выражение надо переписать вот так:
Код: php
1.
preg_match('/^ (?! .* XYZ) \S+ $/x', $str, $matches);


оно и покороче будет.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подскажите регулярное выражение. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]