- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Добрый день :) Вопрос по регулярным выражениям.
Подскажите пожалуйста варианты решения проблемы. Связана она с исключающими символьными классами [ ... ].
Вот например, паттерн
/[^abcd]/
соответствует любому символу в строке, за исключением этих четырех букв. Например: alphabet
Мне необходимо сгруппировать символы в этом исключающем списке, написать что-то типа
/[^(ab)(cd)]/
, чтобы из строки выбрать все, за исключением этих двух последовательностей.
Чтобы было: alphabet
Т.е. надо найти все слова, в которых нет конкретной последовательности символов, например (ab) или (cd).
А по факту получается, что круглые собки в символьном классе понимаются как обычные литералы, и как и прежде паттерн исключает вхождение всех 4-х букв по-отдельности.
Подскажите, как это можно реализовать, каким регексом?
Очень мутно...
Вас просто интересует разъяснение по POSIX regex, или есть конкретная задача?
Типа надо на PHP/Perl/JavaScript (и т.д.) при обработке текста:
а. :)
Мне нужно игнорировать строки, которые содержат определенную последовательность символов. Работаю с PHP.
Есть конкретная задача, вопрос просто упрощен до минимума, чтобы найти "базу", от которой я дальше буду отталкиваться. Ну вот, например, тоже простой пример, но уже практический.
Есть строка: "собака обама акваланг абстракция апельсин".
Нужно выбрать все слова, за исключением тех, в которых присутствует последовательность символов "ба" и "ап".
В результате надо иметь совпадения: "собака обама акваланг апельсин абстракция".
Ближайший приходящий на ум вариант, это перечислить эти неугодные буквы в [^...], но в таком случае будут игнорироваться слова с любой из четырех перечисленных букв, а мне необходимы именно конкретные последовательности "ба" и "ап".
А такая конструкция не пойдёт?
Либо придётся городить в стиле /[^о]{1}[^б]{1}/iu
Спасибо за вариант. Такая штука не пройдет. Дело в том, что этот паттерн, который мы тут можем гипотетически обнаружить, я собираюсь использовать в replace-функциях, потому мне такие разборы полетов не позволительны :)
По факту у меня текст из вложенных блоков, типа:
{block}в первом {block}во втором{/block} в первом{/block} вне блоков {block}опять в блоке{/block}Я должен регуляркой выбрать всё содержимое блоков, попарсить их, вернуть обратно.
Так вот для правильного выбора того что мне нужно, в регулярке надо в одном месте перечислить в исключающем множестве открывающие и закрывающие теги блоков. Будь они одним символом, например (скобками):
Все решается легко, потому что можно указать [^()]. И дело в шляпе. А у меня последовательность символов {block}, которую я не знаю как записать с тем же эффектом.
Наткнулся недавно на выражение: "Если у вас есть проблема и вы думаете, что ее можно решить через регулярные выражения, значит у вас уже есть две проблемы".
Думаю, подобную задачу (с вложенностью) надо решать чем-то типа конечных автоматов. Блоки со вложенными подблоками вообще не нужно обрабатывать или как?
Никак не могу понять задачу. Буду задавать наводящие вопросы.
Есть текст:
Электролиз ясен {block}биуретовая реакция восстановлена {block}выпадение
испускает белок, {block}образуя{/block} кристаллы {block}кубической
формы{/block}{/block}. Энергетический подуровень, даже при наличии
сильных кислот, синтезирует коллоидный энергетический подуровень как при
возбуждении, так и при релаксации.{/block} Возгонка ингибирует
энергетический синтез {block}минуя жидкое состояние{/block}.
С примерно такой структурой:
Задача:
Никак не могу понять задачу. Буду задавать наводящие вопросы.
Хорс, нужно исключить слова которые содержат определенные буквы в строгой последовательности, чего непонятного.
2ТС
Классам никак, в нем не группируются символы.
Я польщён оживленностью в моей теме :)
Хорс, спасибо, что вы тратите свое время задавая такие подробные и разукрашенные вопросы :)
Так, значит, сейчас еще раз кое-что объясню, может быть и вопросы иссякнут.
Есть такая классная штука как рекурсивные регулярки: http://ua2.php.net/manual/en/regexp.reference.recursive.php
Вот ниже пример их работы:
Мой случай практически идентичен зи исключением того, что в этом примере тегами блоков являются скобки "(" и ")", а в моем случае - последовательности символов "{block}" и "{/block}". К слову говоря у них еще параметры есть, но не будем усложнять. По факту мне еще нужно будет дописать паттерн для разделителей типа {block $lala = $blabla}
Так вот, в примере в результате отработки паттерна мы получаем в результатах:
Блоки со вложенными подблоками вообще не нужно обрабатывать или как?
Нужно, я это уже смогу сделать по той же схеме рекурсивно. Они у нас, как видите выше, в первом совпадении в массиве.
Ну и вот, проблема. Когда разделители скобки: в паттерне юзается [^()]+
Когда разделители {block} - хрен его знает как этот паттерн поправить, чтобы он отработал с тем же эфффектом. Вот и весь вопрос :)
Хорс, нужно исключить слова которые содержат определенные буквы в строгой последовательности, чего непонятного.
Мне не понятно, причём тут тогда упоминание блоков. Читайте тему целиком.
Лучше читать сразу мое предыдущее сообщение. Все это выше - для упрощения.
Вопрос не поменялся, но в предыдущем сообщении он в контексте конкретной проблемы.