The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"regexp, отрицание подстоки в строке"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"regexp, отрицание подстоки в строке"  
Сообщение от procool email(??) on 07-Ноя-07, 21:58 
Привет всем!
немогу понять как сделать простое отрицание, приведу пример:
"tag какая то строка tagc" - должно пропустить
"tag какая tag то строка tagc" - нет
"tag какая то строка tag еще строка tagc tagc " должно вырезаьть "еще строка"

пробывал разное, например /$tag(?!$tag)$tagc/ или бред типа /$tag(?:.(?!$tag)*)$tagc/,
как то легче не стало.
Буду благодарен за совет!
regards, procool@

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "regexp, отрицание подстоки в строке"  
Сообщение от angra (ok) on 08-Ноя-07, 07:06 
Не сказал бы что это простое отрицание. Хотя бы потому что вряд ли это доступно на не PCRE.
Для начала внятно ставим задачу: нужно захватить произвольной длинны последовательность произвольных символов, в которой не встречается определенная подстрока. Теперь немного переформулируем, ограничение подстроки перенесем в определение подходящих символов, то есть подходящими символами являются те за которыми не следует определенная подстрока. Такая проверка делается, как вы правильно догадались, на основе заглядывания вперед. теперь собираем
.  - произвольный символ
.(?!$tag)  - произвольный символ, за которым не идет подстрока
(?:.(?!$tag)) - группировка для quantifier
(?:.(?!$tag))* - собственно искомая последовательность
((?:.(?!$tag))*) - искомая последовательность с захватом


P.S. Исходя из примеров могу предположить, что более широкой задачей является парсинг тегов.  И похоже решать вы ее собрались неправильным способом, но он привел к задаче, которую интересно было решить :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "regexp, отрицание подстоки в строке"  
Сообщение от procool email(??) on 08-Ноя-07, 20:09 
>P.S. Исходя из примеров могу предположить, что более широкой задачей является парсинг
>тегов.  И похоже решать вы ее собрались неправильным способом, но
>он привел к задаче, которую интересно было решить :)

Спасибо тебе. вообще давно хотелось сделать модуль один - некий smarttag, который позволял бы объектными методами работать с парсингом темплейтов и заменять в них какие то данные на то что хотелось бы пользователю.
Это могли быть любые теги, например список пользователей или список комнат на чате со вложенным списком пользователей, у которых еще есть вложеный список флагов.
Притом сделать управление обработки этих тегов максимально простым и чтобы программисту неприходилось задумываться о парсинге вообще.

Реализация которую ты предложил работает, спасибо тебе огромное. Но идея действительно была немного неверна - так как она требует буфферизации. А я думаю никому не захочется буферизировать весь список пользователей или правил фаервола или чего там еще может быть.. потому я оставлю наработку как вариант но пойду другим путем - поступательного вывода.
Если будет интересно - выложу пожже рабочий модуль с описанием.

regards, procool@

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру