Регулярные выражения — жадность, ленивость. Берём текст между скобок.
В регулярных выражениях есть жадность и ленивость.
Я не являюсь сторонником их использования.
Давайте рассмотрим примеры, вы поймёте почему не стоит их использовать.
Итак у нас есть текст: [ggdfshgkfdshjksfdjgkdskhdsfhgb]
Нам нужно получить то что между скобочек. Это очень распространённое задание.
Напомню про сервис preg_match_all-online
Жадное выражение:
/\[(.+)\]/
Так напишет любой дурак. Регулярное выражение коментариев не требует, я просто использую группу которая берёт точку с плюсом.
Давайте изменим текст на [[[ggdfshgkfdshjksfdjgkdskhdsfhgb]]]
Итак мы не знаем уровень вложенности скобок.
Запускаем, смотрим что получается в итоге:
Array ( [0] => Array ( [0] => [[[ggdfshgkfdshjksfdjgkdskhdsfhgb]]] ) [1] => Array ( [0] => [[ggdfshgkfdshjksfdjgkdskhdsfhgb]] ) )
Обратите внимания как сработало регулярное выражение.
Смотрим массив [1][0]. Регулярка начала пахать с первой скобки и до самой последней.
Ей было все-равно что на пути у неё другие скобки.
Ленивое выражение:
/\[(.+?)\]/
Запускаем, смотрим что получается в итоге:
Array ( [0] => Array ( [0] => [[[ggdfshgkfdshjksfdjgkdskhdsfhgb] ) [1] => Array ( [0] => [[ggdfshgkfdshjksfdjgkdskhdsfhgb ) )
Тоже смотрим на туже группу в массиве. Остановка произошла после первого вхождения.
Выводы:
Ленивость и жадность это хрень. Их эффективность и надобность весьма сомнительна. В случае лишних скобок вы сами видели что произошло. Нам нужно нечто более надёжное.
Я всегда делаю через отрицание:
/\[([^\[\]]+)\]/
Запускаем, смотрим что получается в итоге:
Array ( [0] => Array ( [0] => [ggdfshgkfdshjksfdjgkdskhdsfhgb] ) [1] => Array ( [0] => ggdfshgkfdshjksfdjgkdskhdsfhgb ) )
Это выражение сложнее и требует объяснения. Начнём слева:
\[ это просто часть нашей скобочки
([^\[\]]+) тут не читаем круглые скобки, тк это просто группа. Смотрим только на [^\[\]]+
Читается как не символ (^) открытой квадратной (\[) или закрытой квадратной скобки (\]) от единицы и более совпадений ([]+). Тк скобки это спецсимвол- я их заэкранировал обратным слэшем.
\] дальше идёт закрывающая скобка.
Одним словом я сделал отрицание нескольких символов.
привет! Как взять текст от слова до слова, выкинув html тэги?
написал вот так #слово1([^»]+)слово2# — и теги остаются. что в регулярку нужно добавить, чтобы выкинуть все не нужное?))
Я так понимаю штмл меж словами?
Сделай stip_tags, так будет лучше.
ok. Спасибо! потыкаю) И еще вопросикс. Какой функцией можно убрать пустые строки из txt?
например:
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
— вот как сделать чтобы было вот так:
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
тряляля это текст это текст это текст это текст
Зарание спасибо)
Прежде чем спрашивать вводи в гугл. Можно так
Огромное спасибо за пинок)) я соединяю php и xhe
Да и простите за нубизм. моим знаниям в php несколько недель))