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

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


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

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

Возможно, примерно в таком направлении подумать...
Код: php
1.
\S*[^\sX](([^\sY])?[^\sZ])?\S*
...
Рейтинг: 0 / 0
Подскажите регулярное выражение.
    #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
Подскажите регулярное выражение.
    #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
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Подскажите регулярное выражение.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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