Помогите с preg_match

Sirpredator

Новичок
Помогите с preg_match

Перекапал форум перечитал книги не могу понять в чем косяк

Уже появляются предположения, что у меня в днк=)

PHP:
preg_match("/^(<title>)?([^\<\/]+)/i", $string, $matches); $textt = $matches[2];
мне надо чтоб эта функция в $textt писала мне то, что находится между тегами <title>123<\title>

в $string находится примерно следущее

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Isomat.su</title>
<meta name="description" content="ISOMAT" />
<meta name="keywords" content="Isomat" />
<meta name="robots" content="index, follow" />
<link href="../css1.css" rel="stylesheet" type="text/css">
<base href="http://www.isomat.su/" />
<link rel="shortcut icon" href="http://www.isomat.su/images/raznoe/logo.gif" />
</head>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">

<table width="968" height="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#A6A6A6">
<tr>
<td>

<!--#include virtual="/include1.inc" -->
<!--#include virtual="/button11.inc" -->

<table width="968" border="0" >
<tr>
<td width="280" align="center" valign="top">
<!--#include virtual="/button0.inc" -->
<!--#include virtual="/minh.inc" -->
</td>
<td align="center" valign="top" >
<!--#include virtual="/inc_menu/21-1m.inc" -->
<table width="650" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="70" height="30" background="../images/tablici/1-1B.gif"></td>
<td width="375" background="../images/tablici/1-2B.gif" class="zagolovok">AQUAMAT</td>
<td width="170" align="right" background="../images/tablici/1-2B.gif"><a href="../images/21/21-1/aquamat.pdf" target="_blank">Технический Бюллетень</a></td>
<td width="26" height="30" background="../images/raznoe/pdf.gif"></td>
<td width="9" height="30" background="../images/tablici/1-3B.gif"></td>
</tr>
</table>

подправте плиз функцию и прощу откоментируйте где не прав
 

DiMA

php.spb.ru
Команда форума
причем тут пробел, просто полная бредятина

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

DiMA

php.spb.ru
Команда форума
Где вас домохозяйки делают-то. Написал же правильный вариант, нет, очередной бредятиной воспользовался, которая будет работать ровно три секунды.
 

Sirpredator

Новичок
Автор оригинала: DiMA
Где вас домохозяйки делают-то. Написал же правильный вариант, нет, очередной бредятиной воспользовался, которая будет работать ровно три секунды.
так твой то не работает!!!!!!!!!!!
 

zerkms

TDD infected
Команда форума
Sirpredator
приведи тест в котором его регулярка не работает.
 

Beavis

Banned
так он небось написал просто
PHP:
<?php
!<title>(.*?)</title>!is
?>
и удивился почему не работает)

-~{}~ 23.08.09 19:18:

Автор оригинала: Sirpredator
биг спс всем кто помог... ЗАРАБОТАЛО
попробуй на таком примере, лол))
Код:
<html>
<head>
<title>
   page title
</title>
</head>
 

freeek

Новичок
<?php
$str = '<html>
<head>
<title>
page title
</title>
</head>';

preg_match('%<title>(.+)</title>%is', $str, $match);
echo '<pre>';
print_r($match);
 

DiMA

php.spb.ru
Команда форума
Мда... Обращение с просьбой ко всем идиотам:

preg_match('/\<title\>(.+)\<\/ti/i', $src, $matches);
preg_match('%<title>(.+)</title>%is', $str, $match);

не пишите здесь больше этот неработающий бред. То, что он прокатывает на некоторых примерах не делает бред правильным вариантом, который еще нужно советовать другим таким же чайникам.

Пишу еще раз правильный вариант ответа:

preg_match("!<title>(.*?)</title>!is" , ...

Естественно, и этот "правильный вариант" можно заглючить (идеальное решение - дерево тегов), но это на несколько ПОРЯДКОВ менее вероятно, чем бредни выше.
 

Nick Mitin

Новичок
preg_match('/\<title\>(.+)\<\/ti/i', $src, $matches);
preg_match('%<title>(.+)</title>%is', $str, $match);
preg_match("!<title>(.*?)</title>!is"

Все три варианта рабочие, ваш просто самый красивый

У вас нет права называть два первых неработающим бредом.
 

DiMA

php.spb.ru
Команда форума
еще один чайник.. иди читай доку о нежадности регов
 

Nick Mitin

Новичок
DiMA

Нет уж, ответьте за свои слова. Расскажите-ка всем, что не с первыми двумя.
 

DiMA

php.spb.ru
Команда форума
Я уже ответил и ткнул носом куда надо.

Если таки ты не чайник и в курсе, что такое жадность, то твой наезд формулируется так: для вырезки текста с тега НУЖНО применять жадные реги. А это полный и очевидный бред. В твоем не формализованном виде (мол, я просто не прав и все) - этого естественно не видно. Можешь создать отдельную тему, мы там подискутируем, я за базар отвечу.
 

Nick Mitin

Новичок
1. я не разрешал вам переходить со мной на ты.
2. я не наезжал и ни единого разу не говорил что НУЖНО употреблять жадные теги, равно как и не утверждал ничего обратного.

3. Все три варианта рабочие по одной простой причине. в HTML документе только один тег <title>, более есть только один тег <time> который начинается на ti (см. первый пункт), который ввели в HTML5, соответственно его еще никто не пользует и вряд-ли будет.

Т.о. мы понимаем, что в данном случае что не имеет значения жадность захватывания в регулярном выражении.

А из этого следует, что все три регулярки работают и у вас нет права называть их нерабочим бредом.

Не путайте людей.
 

freeek

Новичок
to DiMA

заболел?

ну если тайтлов целый вагон, то тогда да
твой вариант уместней, но только речь идет о конкретном примере, поэтому имхо пох как это будет решено
ну пусть если надо ослабить жадность добавим U

давай те уж уважать друг друга
 

Nick Mitin

Новичок
freeek

Я думаю, что топикстартеру лучше все-таки разобраться с жадностью, чем использовать модификатор U.
 
Сверху