$ftext = '1<title>a</title>2<title>b</title>3';
$title_arr = spliti('<title>[^<>]+</title>', $ftext);
Запара с ReqExp
Если вот допустим такой код
Код:
То в массив кидает '1', '2', '3'. А я хочу получить 'a', 'b'.
Сорри описался :)
Я так понимаю количество пар <title>a</title>2 может быть сколько угодным?
Блин, люди, ну подскажите !!!!
Разделитель <title>[^<>]+</title>, а тебе надо получить [^<>]+
А после операции разделения САМ РАЗДЕЛИТЕЛЬ пропадает.
В общем дели тем, что тебе не нужно
Разделитель <title>[^<>]+</title>, а тебе надо получить [^<>]+
А после операции разделения САМ РАЗДЕЛИТЕЛЬ пропадает.
В общем дели тем, что тебе не нужно[/QUOTE]
Так получаю вообще не то :( И фишка в том что на месте 1, 2, 3,... может стоять что угодно.
Ну тебе же надо получить то что между тегами <title> </title> находится?
Код:
my @array = ($text =~ /<title>(\w)<\/title>/g );
Вот тебе ссылка: http://ru.php.net/manual/ru/function.preg-match-all.php
А вот тебе применительно к твоей ситуации:
Код:
<?
$ftext = '1<title>a</title>2<title>b</title>3';
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/isU", $ftext, $title_arr);
for ($i=0; $i< count($title_arr[0]); $i++)
{
echo "Полное совпадение: " . $title_arr[0][$i] . "\r\n";
echo "часть 1: " . $title_arr[1][$i] . "\r\n";
echo "часть 2: " . $title_arr[3][$i] . "\r\n";
echo "часть 3: " . $title_arr[4][$i] . "\r\n";
}
?>
$ftext = '1<title>a</title>2<title>b</title>3';
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/isU", $ftext, $title_arr);
for ($i=0; $i< count($title_arr[0]); $i++)
{
echo "Полное совпадение: " . $title_arr[0][$i] . "\r\n";
echo "часть 1: " . $title_arr[1][$i] . "\r\n";
echo "часть 2: " . $title_arr[3][$i] . "\r\n";
echo "часть 3: " . $title_arr[4][$i] . "\r\n";
}
?>
Только когда будешь запускать скрипт на результат в окне браузера внимания не обращай, щелкай правой кнопкой и смотри результат по HTML коду
Код:
Полное совпадение: <title>a</title>
часть 1: <title>
часть 2: a
часть 3: </title>
Полное совпадение: <title>b</title>
часть 1: <title>
часть 2: b
часть 3: </title>
часть 1: <title>
часть 2: a
часть 3: </title>
Полное совпадение: <title>b</title>
часть 1: <title>
часть 2: b
часть 3: </title>
Твои искомые А и Б находятся в "часть 2:" :D
Код:
my @array = ($text =~ /<title>(\w)<\/title>/g );
:cool: :cool: :cool:
что не подходит ?
Ну ты же привел пример не на PHP
что то я ни слова про PHP не видел ;) ну нет, так нет.
Забавно, про PHP слов действительно нету
Но эта функция пэхепешная же?
Код:
spliti(регулярный разделитель, разделяемая строка);
Мож и на других языках аналогичная функция есть?
ну если это не опечатка и действительно 'spliti', тогда в перле я такого не знаю. а вот если split - тогда есть.
split и в PHP есть
spliti отличается от split тем, что она :) в отличии от него :) нечувствительна к регистру
Вот тебе ссылка: http://ru.php.net/manual/ru/function.preg-match-all.php
А вот тебе применительно к твоей ситуации:
Код:
<?
$ftext = '1<title>a</title>2<title>b</title>3';
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/isU", $ftext, $title_arr);
for ($i=0; $i< count($title_arr[0]); $i++)
{
echo "Полное совпадение: " . $title_arr[0][$i] . "\r\n";
echo "часть 1: " . $title_arr[1][$i] . "\r\n";
echo "часть 2: " . $title_arr[3][$i] . "\r\n";
echo "часть 3: " . $title_arr[4][$i] . "\r\n";
}
?>
$ftext = '1<title>a</title>2<title>b</title>3';
preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/isU", $ftext, $title_arr);
for ($i=0; $i< count($title_arr[0]); $i++)
{
echo "Полное совпадение: " . $title_arr[0][$i] . "\r\n";
echo "часть 1: " . $title_arr[1][$i] . "\r\n";
echo "часть 2: " . $title_arr[3][$i] . "\r\n";
echo "часть 3: " . $title_arr[4][$i] . "\r\n";
}
?>
Только когда будешь запускать скрипт на результат в окне браузера внимания не обращай, щелкай правой кнопкой и смотри результат по HTML коду
Код:
Полное совпадение: <title>a</title>
часть 1: <title>
часть 2: a
часть 3: </title>
Полное совпадение: <title>b</title>
часть 1: <title>
часть 2: b
часть 3: </title>
часть 1: <title>
часть 2: a
часть 3: </title>
Полное совпадение: <title>b</title>
часть 1: <title>
часть 2: b
часть 3: </title>
Твои искомые А и Б находятся в "часть 2:" :D[/QUOTE]
Неа у меня кроме тегов title есть еще и другие теги. А мне нужно ТОЛЬКО между title
Все уже понял. Сенк за ссылку :)
Код:
preg_match_all('/<title>(.*)<\/title>/i', $ftext, $title_arr);
$title_arr = $title_arr[1];
for ($i=0; $i< count($title_arr); $i++){
echo $title_arr[$i]."\n";
}
$title_arr = $title_arr[1];
for ($i=0; $i< count($title_arr); $i++){
echo $title_arr[$i]."\n";
}
гм не совсем справился. Кто объяснит
Код:
$ftext = '<table border=0 cellPadding=0 cellSpacing=0 width=780>
<tr><td bgcolor=#6f67b5 colspan=3><img src="/pic/tr.gif" width=1 height=1 border=0></td></tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#ffffff><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td align=middle bgcolor=#6f67b5>
<table border=0 cellpadding=0 cellspacing=0 width=778>
<tr><td bgcolor=#6f67b5 class=white height=22 valign=top>Новости Hi-Tech индустрии</td></tr>
</table>
</td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#ffffff><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
</table>';
preg_match_all('/<table(.*)<\/table>/i', $ftext, $content_arr);
$ftext = $content_arr[0][0];
echo($ftext);
?>
<tr><td bgcolor=#6f67b5 colspan=3><img src="/pic/tr.gif" width=1 height=1 border=0></td></tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#ffffff><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td align=middle bgcolor=#6f67b5>
<table border=0 cellpadding=0 cellspacing=0 width=778>
<tr><td bgcolor=#6f67b5 class=white height=22 valign=top>Новости Hi-Tech индустрии</td></tr>
</table>
</td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
<tr>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#ffffff><img src="/pic/tr.gif" width=1 height=1 border=0></td>
<td bgcolor=#6f67b5><img src="/pic/tr.gif" width=1 height=1 border=0></td>
</tr>
</table>';
preg_match_all('/<table(.*)<\/table>/i', $ftext, $content_arr);
$ftext = $content_arr[0][0];
echo($ftext);
?>
Где ошибка? Че ниче не выводит?
Введение в регулярные выражения PHP. Синтаксис
Может дело в модификаторах?
У тебя стоит
i Включение режима case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
Попробуй добавить
s По умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение.
И в большинстве случаев требуется
U Делает все количественные метасимволы "не жадными" по умолчанию
то есть там где у тебя стоит i, попробуй поставить isU (прямо так, три буквы подряд)
[URL="http://www.codenet.ru/webmast/php/regexps.php"]
то есть там где у тебя стоит i, попробуй поставить isU (прямо так, три буквы подряд)[/QUOTE]
Не помогло :(
Код:
preg_match_all('#<table>(.*)</table>#i', $ftext, $content_arr);
И замени <,> на их ord() значения!
Код:
preg_match_all('#<table>(.*)</table>#i', $ftext, $content_arr);
И замени <,> на их ord() значения![/QUOTE]
Не помогло :(
Откуда вообще взялся такой бред с тегами?
Смотри выше такой длииииииииииный мой пост.
У меня RegExp Coach совпадение показывает... Так что...Модет ты неправильно задачу формируешь...
У меня RegExp Coach совпадение показывает... Так что...Модет ты неправильно задачу формируешь...[/QUOTE]
Так я проставлял isU, не помогло :(
ЛЮДИ, ПОМОГИТЕ, Я В НАКАУТЕ!!!
Цитата:
preg_match_all('/<table(.*)<\/table>/i', $ftext, $content_arr);
после table нет закрывающей скобки ">". Так задумано? Потом надо писать не (.*) ,а (.*?) либо добавлять модификатор U (в этом не уверенЭ, но, почитав другие посты, думаю в этом смысл этого модификатора). Да и вообще привёл бы пример то что есть, то что надо получить и то что ты попытался сделать.
Та короче сделал все через DOMDocument и фиг с ним.
наверняка они ещё не раз пригодятся
[QUOTE=kopex]а может стоило бы один раз разобраться с регэкспами и радоваться жизни :)