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

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

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

 

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

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

тема: Вытащить текст из нужного места в строке
 
 автор: Петр   (05.07.2007 в 10:39)   письмо автору
 
 

Добрый день.
Как вытащить текст из таблицы:
<table width="100%"><tr><td bgcolor="#AF10B6">Тест1</td><td bgcolor="#AF105F">Текст2<br>56%</td></tr><tr><td bgcolor="#CF8090">Тест3</td><td bgcolor="#9FC0A6">Текст4<br>82,5%</td></tr></table>
(нужно только слова ТекстN)

|<tr><td[^>]+>(.*?)</td><td[^>]+>(.*?)</td></tr>|
работает, но выводит все, но нужно разделить второй столбец, выбрать только текст, без процентов
|<tr><td[^>]+>(.*?)</td><td[^>]+>(.*?)<br>(?)</td></tr>|
не работает..

   
 
 автор: kasmanaft   (05.07.2007 в 11:04)   письмо автору
 
   для: Петр   (05.07.2007 в 10:39)
 

Попробуйте заменить <br>(?) на (?:<br>.*?)?

   
 
 автор: Петр   (05.07.2007 в 11:12)   письмо автору
 
   для: kasmanaft   (05.07.2007 в 11:04)
 

Нет, так тоже не получилось, только одна строка выбралась, а должны несколько.
Проценты, не должны попадать в массив, их надо просто пропустить

   
 
 автор: kasmanaft   (05.07.2007 в 11:16)   письмо автору
 
   для: Петр   (05.07.2007 в 11:12)
 

Ыыыы... они в массив и не попадут..

<?php
$text 
'<table.........</table>';
preg_match_all("|<tr><td[^>]+>(.*?)</td><td[^>]+>(.*?)(?:<br>.*?)?</td></tr>|"$text$regs);
print_r($regs);
?>

   
 
 автор: Петр   (05.07.2007 в 11:20)   письмо автору
 
   для: kasmanaft   (05.07.2007 в 11:16)
 

Так и не получилось...
Одна строка только подходит, заменяется

   
 
 автор: kasmanaft   (05.07.2007 в 11:37)   письмо автору
 
   для: Петр   (05.07.2007 в 11:20)
 

Так вам заменить надо или вытащить? Конкретно этот код, что я привел, работает?
Может быть, попропробуйте вот так(?:<br>[\d,.]*%)?

   
 
 автор: Петр   (05.07.2007 в 12:55)   письмо автору
 
   для: kasmanaft   (05.07.2007 в 11:37)
 

Возвращает пустой массив.
Может подскажете другое, мне можно заменить регулярным выражением следущее:
Исходная строка:
123<br>911
Как вырезать из нее только первое число, т.е. убрать <br> и второе число (второе число всегда 3 символа)?
Это все в Smarty, поэтому надо как-то экранировать {}

   
 
 автор: kasmanaft   (05.07.2007 в 13:19)   письмо автору
 
   для: Петр   (05.07.2007 в 12:55)
 

>> Конкретно этот код, что я привел, работает?
Ну, конечно, <table.........</table> нужно было заменить :)
>> Может подскажете другое
Нет уж давайте додумаем предыдущий вопрос... :)
Может быть у Вас таблица не одной строкой записана? тогда нужно добавить модификатор 's'
.........)?</td></tr>|s

Покажите свой код, тогда можно будет точно сказать почему не работает.

> Исходная строка: 123<br>911, как вырезать из нее только первое число?
Всю строку описывать не обязательно, можно описать только то, что нужно получить:
"^\d+" - найдет как раз "123" (если строка начинается с "123", иначе уберите "^")

   
 
 автор: Петр   (05.07.2007 в 13:41)   письмо автору
 
   для: kasmanaft   (05.07.2007 в 13:19)
 

Спасибо, все нормально работает
А как мне допустим получить:
Из массива выводятся данные, некоторые ячейки содержат +10<br>+20, некоторые просто +15, как мне разбить одиночное значение на интервал? (прибавить и отнять 5 от значения), чтобы было +10 и +20

   
 
 автор: kasmanaft   (05.07.2007 в 14:59)   письмо автору
 
   для: Петр   (05.07.2007 в 13:41)
 

О как!

<?php
$text 
'+15';
//$text = '+15<br>+20';
//$text = '+1';
//$text = '-5';
echo preg_replace("#(?<!<br>)((\+|-)\d++)(?!<br>)#e""sprintf('%+d', $1-5).'<br>'.sprintf('%+d', $1+5)"$text);
?>

Если минусы не нужны, замените (\+|-) на \+

   
 
 автор: Петр   (09.07.2007 в 06:13)   письмо автору
 
   для: kasmanaft   (05.07.2007 в 14:59)
 

Большое спасибо, очень выручили

   
Rambler's Top100
вверх

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