Регулярное выражение с прямым слэшем

djArf

Новичок
Регулярное выражение с прямым слэшем

php 5.2.3, register_globals = off, Apache, WInXP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Задача: получить часть строки, заключенную между определенными тегами:

some_text<tag>needed_text</tag>some_text

Пробовал:
PHP:
$string = "bla-bla-bla <tag>THAT'S IT!</tag> bla-bla-bla"
$pattern = "/[<tag>]\w+[<\/tag>]/";
$out = preg_split($pattern,$string);
Получаю массив из двух элементов: часть строки до <tag> и часть строки после <tag> до конца строки.
Проблема в закрывающем теге, поскольку конструкция вида

PHP:
$string = "bla-bla-bla <open>THAT'S IT!<close> bla-bla-bla"
$pattern = "/[<open>]\w+[<close>]/";
$out = preg_split($pattern,$string);
работает так, как нужно (т.е. выдает массив из 3-х элементов, 2-й из которых как-раз искомая подстрока.
Экранировал уже по-всяком, бесполезно. Где собака порылась?
Спасибо.
 

kruglov

Новичок
В качестве ограничивающих символов можно использовать не только слеши. Попробуйте #, ~ или @
 

Андрейка

Senior pomidor developer
djArf
надо не просто пробовать, но и понимать что должно получиться и зачем так пробовать

echo $pattern; выведет
/[<tag>]\w+[</tag>]/

экранирован второй слэш?
 

kruglov

Новичок
Это первое.

Второе - вы не совсем правильно представляете себе функции квадратных скобок. Почитайте http://phpfaq.ru
 

djArf

Новичок
Автор оригинала: Андрейка
надо не просто пробовать, но и понимать что должно получиться и зачем так пробовать
экранирован второй слэш?
:) Сразу раскусил... Каюсь, пробовать начал после прочтения вводной статейки в регэкспы, до этого удавалось обходиться без них, хотя нутром чувствовал (и чувствую), что с ними жизнь намного проще. И рано или поздно я их освою, клянусь! :)
Но как решить имеющуяся на данный момент проблемку? По старинке, строковыми функциями? Не хотелось бы...
P.S. А к квадратным скобкам, действительно, пришел скорее эмпирически, чем осознанно... Но ведь с ними ближе к результату, чем без них! Если бы не проклятый закрывающий тег... Хотя его ввожу сам, можно действительно сделать что-то типа <open>-<close>. Но некрасиво как-то...
 
Сверху