Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Запара с ReqExp

8.8K
24 октября 2006 года
Alximik
95 / / 24.10.2006
Вот зы почему так получатеся?
Если вот допустим такой код
 
Код:
$ftext = '1<title>a</title>2<title>b</title>3';
$title_arr = spliti('<title>[^<>]+</title>', $ftext);


То в массив кидает '1', '2', '3'. А я хочу получить 'a', 'b'.

Сорри описался :)
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
Подправил свою опечатку я смотрю
Я так понимаю количество пар <title>a</title>2 может быть сколько угодным?
8.8K
25 октября 2006 года
Alximik
95 / / 24.10.2006
Блин, люди, ну подскажите !!!!
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
На самый первый взгляд корень проблемы в том, что ты в качестве разделителя используешь то что ты хочешь получить.
Разделитель <title>[^<>]+</title>, а тебе надо получить [^<>]+
А после операции разделения САМ РАЗДЕЛИТЕЛЬ пропадает.
В общем дели тем, что тебе не нужно
8.8K
25 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=Dionis]На самый первый взгляд корень проблемы в том, что ты в качестве разделителя используешь то что ты хочешь получить.
Разделитель <title>[^<>]+</title>, а тебе надо получить [^<>]+
А после операции разделения САМ РАЗДЕЛИТЕЛЬ пропадает.
В общем дели тем, что тебе не нужно[/QUOTE]
Так получаю вообще не то :( И фишка в том что на месте 1, 2, 3,... может стоять что угодно.
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
Ну тебе же надо получить то что между тегами <title> </title> находится?
2
25 октября 2006 года
squirL
5.6K / / 13.08.2003
ну я бы так сделал, навскидку:
 
Код:
my @array = ($text =~ /<title>(\w)<\/title>/g );
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
В общем читать надо мануалы:
Вот тебе ссылка: 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";
}
?>


Только когда будешь запускать скрипт на результат в окне браузера внимания не обращай, щелкай правой кнопкой и смотри результат по HTML коду


 
Код:
Полное совпадение: <title>a</title>
часть 1: <title>
часть 2: a
часть 3: </title>
Полное совпадение: <title>b</title>
часть 1: <title>
часть 2: b
часть 3: </title>


Твои искомые А и Б находятся в "часть 2:" :D
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
[QUOTE=squirL]ну я бы так сделал, навскидку:
 
Код:
my @array = ($text =~ /<title>(\w)<\/title>/g );
[/QUOTE]

:cool: :cool: :cool:
2
25 октября 2006 года
squirL
5.6K / / 13.08.2003
что не подходит ?
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
[QUOTE=squirL]что не подходит ?[/QUOTE]

Ну ты же привел пример не на PHP
2
25 октября 2006 года
squirL
5.6K / / 13.08.2003
что то я ни слова про PHP не видел ;) ну нет, так нет.
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
[QUOTE=squirL]что то я ни слова про PHP не видел ;) ну нет, так нет.[/QUOTE]


Забавно, про PHP слов действительно нету
Но эта функция пэхепешная же?

 
Код:
spliti(регулярный разделитель, разделяемая строка);


Мож и на других языках аналогичная функция есть?
2
25 октября 2006 года
squirL
5.6K / / 13.08.2003
ну если это не опечатка и действительно 'spliti', тогда в перле я такого не знаю. а вот если split - тогда есть.
17K
25 октября 2006 года
Dionis
23 / / 29.08.2006
[QUOTE=squirL]ну если это не опечатка и действительно 'spliti', тогда в перле я такого не знаю. а вот если split - тогда есть.[/QUOTE]

split и в PHP есть
spliti отличается от split тем, что она :) в отличии от него :) нечувствительна к регистру
8.8K
25 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=Dionis]В общем читать надо мануалы:
Вот тебе ссылка: 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";
}
?>


Только когда будешь запускать скрипт на результат в окне браузера внимания не обращай, щелкай правой кнопкой и смотри результат по HTML коду


 
Код:
Полное совпадение: <title>a</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";
   }





гм не совсем справился. Кто объяснит
Код:
$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);
?>

Где ошибка? Че ниче не выводит?
17K
26 октября 2006 года
Dionis
23 / / 29.08.2006
изучи статью на этом же сайте
Введение в регулярные выражения PHP. Синтаксис
Может дело в модификаторах?
У тебя стоит
i Включение режима case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
Попробуй добавить
s По умолчанию метасимвол '.' не включает в свое определение символ перевода строки. Т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение.
И в большинстве случаев требуется
U Делает все количественные метасимволы "не жадными" по умолчанию

то есть там где у тебя стоит i, попробуй поставить isU (прямо так, три буквы подряд)
8.8K
27 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=Dionis]изучи статью на этом же сайте
[URL="http://www.codenet.ru/webmast/php/regexps.php"]

то есть там где у тебя стоит i, попробуй поставить isU (прямо так, три буквы подряд)[/QUOTE]

Не помогло :(
244
27 октября 2006 года
UAS
2.0K / / 19.07.2006
Проверить не могу, т.к. комп улетел... Попробуй так:
 
Код:
preg_match_all('#<table>(.*)</table>#i', $ftext, $content_arr);

И замени <,> на их ord() значения!
8.8K
27 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=UAS]Проверить не могу, т.к. комп улетел... Попробуй так:
 
Код:
preg_match_all('#<table>(.*)</table>#i', $ftext, $content_arr);

И замени <,> на их ord() значения![/QUOTE]
Не помогло :(
13
27 октября 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=Alximik]Не помогло :([/QUOTE]
Откуда вообще взялся такой бред с тегами?
8.8K
27 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=RussianSpy]Откуда вообще взялся такой бред с тегами?[/QUOTE]
Смотри выше такой длииииииииииный мой пост.
244
27 октября 2006 года
UAS
2.0K / / 19.07.2006
А ты поставь модификатор 's', у тебя просто не по всему тексту идёт поиск, а по первой строчке! Короче оставь как у тебя было, просто в конце доьавь модификатор 's'.
У меня RegExp Coach совпадение показывает... Так что...Модет ты неправильно задачу формируешь...
8.8K
27 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=UAS]А ты поставь модификатор 's', у тебя просто не по всему тексту идёт поиск, а по первой строчке! Короче оставь как у тебя было, просто в конце доьавь модификатор 's'.
У меня RegExp Coach совпадение показывает... Так что...Модет ты неправильно задачу формируешь...[/QUOTE]
Так я проставлял isU, не помогло :(
8.8K
28 октября 2006 года
Alximik
95 / / 24.10.2006
ЛЮДИ, ПОМОГИТЕ, Я В НАКАУТЕ!!!
2.1K
29 октября 2006 года
vectoroc
234 / / 25.07.2006
Цитата:
preg_match_all('/<table(.*)<\/table>/i', $ftext, $content_arr);


после table нет закрывающей скобки ">". Так задумано? Потом надо писать не (.*) ,а (.*?) либо добавлять модификатор U (в этом не уверенЭ, но, почитав другие посты, думаю в этом смысл этого модификатора). Да и вообще привёл бы пример то что есть, то что надо получить и то что ты попытался сделать.

8.8K
29 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=kopex]после table нет закрывающей скобки ">". Так задумано? Потом надо писать не (.*) ,а (.*?) либо добавлять модификатор U (в этом не уверенЭ, но, почитав другие посты, думаю в этом смысл этого модификатора). Да и вообще привёл бы пример то что есть, то что надо получить и то что ты попытался сделать.[/QUOTE]
Та короче сделал все через DOMDocument и фиг с ним.
2.1K
29 октября 2006 года
vectoroc
234 / / 25.07.2006
а может стоило бы один раз разобраться с регэкспами и радоваться жизни :)
наверняка они ещё не раз пригодятся
8.8K
29 октября 2006 года
Alximik
95 / / 24.10.2006
[QUOTE=kopex]а может стоило бы один раз разобраться с регэкспами и радоваться жизни :)
наверняка они ещё не раз пригодятся[/QUOTE]
http://forum.codenet.ru/showthread.php?t=31108
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог