Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите составить регулярку


Автор: SneG0K 6.5.2010, 21:54
В общем получаю некий html валидный код, нужно получить все, что находится между
Код

<title>  [color=red]Нужная информация[/color]  - Site name - Site page </title>

Т.е. нужную информацию.

Автор: unicross 6.5.2010, 22:13
Код
$str = '<Title>  Нужная  - информация  - Site name - Site page </title>';
$arr = array();
if (preg_match('#<title>(.*)\-.*?\-.*?</title>#si', $str, $arr)) {
   echo $arr[1];
}
else echo 'Не найдено';

?

Добавлено через 7 минут и 2 секунды
Или так:
Код
$str = '<Title>  Нужная  - информация  - Site name - Site page </title>';
$arr = array();
if (preg_match('#<title>([^<]*)\-[^<]*?\-[^<]*?</title>#si', $str, $arr)) {
   echo $arr[1];
}
else echo 'Не найдено';

Автор: SneG0K 6.5.2010, 23:05
А оно получается еще захватывает кусок
Цитата

  - Site name - Site page 
А нужно только
Цитата

Нужная информация
 smile

Добавлено через 3 минуты и 7 секунд
Точнее там есть еще некий кусочек текста, который нужно обрезать smile

Автор: unicross 6.5.2010, 23:40
$arr[0] содержит полное совпадение, а $arr[1] только "Нужная информация". Или BB-коды color также входят в заголовок?

Чтобы что-то найти нужно сделать привязку к чему-нибудь. Вот в "Нужная информация" дефис может содержать или нет? Если нет, то можно сделать привязку к <title>:
Код
$str = '<Title>  Нужная информация  - Site name - Site page </title>';
$arr = array();
if (preg_match('#<title>([^<]*?)\-#si', $str, $arr)) {
   echo $arr[1];
}
else echo 'Не найдено';

Однако, если дефис может быть, то получите только фрагмент до первого дефиса...

Цитата
Точнее там есть еще некий кусочек текста, который нужно обрезать

SneG0K, показал бы этот кусочек...

Автор: SneG0K 7.5.2010, 12:30
Стоп, начал применять это на деле, ничего не вышло.
Есть некий HTML код. Извлечь весь текст между <title> и </title>
Внутри могут быть абсолютно ЛЮБЫЕ символы.

Автор: patap 7.5.2010, 12:48
это должно быть то, что между bb-тегом color
Код

<title>.*?\[color=red\](.*?)\[/color\].*?</title>


если все что между <title></title>
Код

<title>(.*?)</title>


если не то, то лучше приведи примеры текстов как просил unicross

Автор: SneG0K 7.5.2010, 13:18
Там бб-тега небыло. Это форум криво вставил ((

Добавлено через 8 секунд
Спасибо)

Автор: Guedda 13.5.2010, 11:24
С регулярками не получается дружить, помогите, пожалуйста.
Есть строка, надо проверить, если есть в этой строке _min товыполнять какое-то действие, иначе не выполнять. Как сделать это? Заранее благодарен.

Автор: NewDima 13.5.2010, 12:29
Для этого не нужна регулярка. strpos

Автор: Guedda 13.5.2010, 13:29
Спасибо. Вообще об этой функции забыл...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)