- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть строка
START START text1 END START text2 END END
как получить в результате
START text1 END
и
START text2 END
используя такую регулярку
preg_match_all('/START (.*?) END/', $text, $matches);
получаются результаты вида
START START text1 END
то есть нужно как то указать, что группа символов "START" не может встречаться в "(.*?)", либо то, что она может встречаться только один раз во всём результате (то есть в начале, как это и указано в паттерне)
Подскажите, пожалуйста, как это сделать
а START только два раза может появляться? Если да, то просто впишите два их в регулярку и всё.
Попробуй вот это /\sSTART{1} (.*?) END/
вот он пример http://regexr.com?2tla1
Если убрать изврат и перевести задачу в более классический вид (заменой "START " на "{" и "END" на "}"), то работать со строкой проще: "{ { text1 } { text2 } }"
Ваша регулярка: /({[^{}]*})/
P.S. скобочки поставил чисто ради единообразия.
P.P.S. а вообще строка напоминает изобретение своего JSON)
может и больше
вот он пример http://regexr.com?2tla1
Тут все, скажем так, пляшет от того, что до START должен быть какой нибудь пробельный символ (\s). Но дело в том что строка может быть и такой
"START START START text11 END START text12 END END START text2 END END"
и результат будет некорректен
Ваша регулярка: /({[^{}]*})/
в приципе то конечно можно, но весь текст который есть внутри придётся проверять на наличие таких же скобок и заменять/экранировать их в нём, потом после всех операций приводить его к первозданному виду. Так что хз где будет больший изврат ) .. Как бы вариант то рабочий, но я просто надеялся найти решение в одну строку..
>P.P.S. а вообще строка напоминает изобретение своего JSON)
Это что то вроде обработки вложенного списка.. Типа рекурсивно разбить всё дерево на ветви.. Пользоваться какими то библиотеками ради такой мелкой задачки не хочется..
вот такую мне подсказали на одном форуме
preg_match_all("/START(?!\s*START\s*)((?:.|\s)+?)END/", $text, $matches);
вроде всё как надо