Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не получаеться вырезать значение внутри тега
 
 автор: tvv123456   (21.07.2010 в 14:09)   письмо автору
 
 

Доброго времени суток.
Вот такая проблема:

Написал код для проверки:

<?php 
$text 
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>'
;

preg_match("|<title>(.*?)<\/title>|"$text$result);

print_r($result);



В результате получаеться вот это:
Array
(
    [0] => <title>Untitled Document</title>
    [1] => Untitled Document
)



Первый элемент массива явно лишний. Как переделать регулярное выражение так чтобы в результаты заносилось только то что между тегами(т.е. из результатов нужно убрать первый элемент массива)

  Ответить  
 
 автор: neadekvat   (21.07.2010 в 21:47)   письмо автору
 
   для: tvv123456   (21.07.2010 в 14:09)
 

Дак ведь так и должно быть, насколько я помню. То есть первый элемент - это часть строки, в которой вхождение найдено, а второй элемент - само вхождение

  Ответить  
 
 автор: Tonik992   (21.07.2010 в 22:20)   письмо автору
 
   для: tvv123456   (21.07.2010 в 14:09)
 

Нельзя..
Делай так сразу после регулярки: $array['0'] = $array['1']; (так, позабавиться)

  Ответить  
 
 автор: psychomc   (21.07.2010 в 23:38)   письмо автору
 
   для: tvv123456   (21.07.2010 в 14:09)
 

вам оно мешает?
почитайте лучше мануал по функции preg_match.
а если так уж не нравится элемент - удалите его unset($result[0]);
:)

  Ответить  
 
 автор: tvv123456   (22.07.2010 в 20:06)   письмо автору
 
   для: psychomc   (21.07.2010 в 23:38)
 

Ну я знаю почему получаеться 2 записи. Если честно, немного раздражает что не могу получить то что именно нужно :)))). Думал кто-нить подскажет альтернативный вариант.
Ну, а делать из-за этого дополнительные шаги типа unset($result[0]); не очень тоже нравиться :)

  Ответить  
 
 автор: Tonik992   (23.07.2010 в 01:07)   письмо автору
 
   для: tvv123456   (22.07.2010 в 20:06)
 

Придется привыкнуть, таков php

  Ответить  
 
 автор: neadekvat   (23.07.2010 в 10:09)   письмо автору
 
   для: Tonik992   (23.07.2010 в 01:07)
 

Выглядит как камень в сторону php.
Неуместное выражение в данном случаи.

  Ответить  
 
 автор: psychomc   (23.07.2010 в 10:13)   письмо автору
 
   для: tvv123456   (22.07.2010 в 20:06)
 

а unset и не надо делать, вам этот элемент массива никак не мешает.
просто функция сама по себе чуть более универсальная, чем вам в данном случае надо. вот и всё

  Ответить  
 
 автор: sms-send   (23.07.2010 в 10:31)   письмо автору
 
   для: tvv123456   (21.07.2010 в 14:09)
 

> Как переделать регулярное выражение так чтобы в результаты заносилось только то что между тегами(т.е. из результатов нужно убрать первый элемент массива)

// <?php
preg_match
("|(?<=<title>).*?(?=</title>)|"$text$result);

  Ответить  
 
 автор: tvv123456   (23.07.2010 в 14:35)   письмо автору
 
   для: sms-send   (23.07.2010 в 10:31)
 

Спасибо! Работает, только я нашел уже другое решение :)
И у этого выражения время выполнения в разы больше чем у исходного, что меня лично напрягает больше, чем ненужный мусор в массиве :)))))))

  Ответить  
 
 автор: sms-send   (23.07.2010 в 16:42)   письмо автору
 
   для: tvv123456   (23.07.2010 в 14:35)
 

Ну как же так, задача в теме ставилась именно переделать (жирно) регулярное выражение с целью получить массив в желанном виде:))

А вообще читайте док по функции preg_match:
...$matches[0] will contain the text that matched the full pattern...

Чего там в массиве может не нравиться не совсем ясно.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования