Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Автор: ForposT_ForeveR
Дата сообщения: 25.07.2009 19:32
Здравствуйте.
Подскажите пожалуйста, имеем ссылку вида
< a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всего> Notebook Acer</a>.
Необходимо вывести все название с их ID'шками.
Notebook Acer - 363809
Текст находится в переменной $html
Буду безмерно благодарен за РНРшный скрипт.
Автор: Cheery
Дата сообщения: 25.07.2009 21:50
Mira

Цитата:
подскажите пожалуйста, почему вот так работает

потому что ? и * - не одно и то же.

ForposT_ForeveR
ну посмотрели бы ранее - куча аналогичных примеров. даже почти думать не надо

Код: $str='< a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" id="test"> Notebook Acer</a>';
preg_match('/<\s+a.*id=(\'|")(.*)\\1.*>(.*)<\/a>/iU',$str,$matches);
print_r($matches);
Автор: ForposT_ForeveR
Дата сообщения: 25.07.2009 23:25
Cheery

Спасибо.

Хотелось бы через preg_match_all
И второе, чтобы он парсил product_id
Автор: Cheery
Дата сообщения: 25.07.2009 23:36
ForposT_ForeveR

Цитата:
Хотелось бы через preg_match_all

и? то, что вы используете другую функцию не меняет регулярку


Цитата:
И второе, чтобы он парсил product_id

а сразу об этом сказать - религия не позволяет?
добавить product_id=(\d+)
Автор: ForposT_ForeveR
Дата сообщения: 26.07.2009 00:04
Cheery
Прошу прощения, нечётко объяснил.
Есть ссылки такого ввида:
<a href="/products.php?product_id=363809#product_363809" title="Notebook Acer" и тут ещё куча всего> Notebook Acer</a>

Надо получить значения product_id и title(либо, то что заключено между <a>это значение</a>, потому как они одинаковые).

Спасибо
Автор: Crocell
Дата сообщения: 26.07.2009 03:22
ForposT_ForeveR
так пойдет?
<a .+?\?product_id=(\d+)#.+?>(.+?)</a>

з.ы. сорри за оффтоп, но тут что, все подбирают регулярки методом проб и ошибок? Есть например, прекрасная визуальная тулза, которую можно установить как air-приложение.
Автор: ForposT_ForeveR
Дата сообщения: 26.07.2009 06:43
Crocell
Пробовал ругается, на символ '('.
Напишите пожалуйста, полный код.
Спасибо.
Автор: Cheery
Дата сообщения: 26.07.2009 07:47
ForposT_ForeveR
покажите как использовали
И точное сообщение об ошибке
Автор: DreamKatcher
Дата сообщения: 01.08.2009 10:14
DarkSmoke
столкнулся с подобной же проблемой, нужно было запрещать все символы, кроме одиночного тире и одной точки, ну и алфавита с цифрами. Решил вот таким образом на PHP:

$arr_replace=array ('/[^0-9а-яa-z\-\s\.]/i',
                    '/\-{2,}/',
                    '/\.{2,}/');
$query=preg_replace($arr_replace,"",$_GET['query'])

Теперь было бы удобно удалять все знаки "!", кроме одиночного "!" в начале слова, '/\<\!{1}/' - не срабатывает.
Автор: vegaweb
Дата сообщения: 04.08.2009 16:33
Help please
есть строка с N количеством текста, в том числе теги.
задача - выдрать из строки такого вида

Код: <a href="page.php?var=(4516)">(text)</a>
Автор: JacobyD
Дата сообщения: 05.08.2009 16:14
как обозначить от начала строки до слова "img"?
Автор: Cheery
Дата сообщения: 05.08.2009 17:54
JacobyD
повторяю в последний раз - прочитайте ссылку в моей подписи о том, как следует задавать вопррсы. Обозначить что?
Автор: JacobyD
Дата сообщения: 05.08.2009 18:38
А как вы думаете о чем топик и какие здесь вопросы обсуждают?
-Обозначить что?
-обозначить выражение

Добавлено:
Жаль что вы не думаете...
Автор: Cheery
Дата сообщения: 05.08.2009 19:18
JacobyD
Уважаемый. Ваш уровень знаний был уже оценен из вашей первоначальной темы, поэтому и было сказано - формулируйте вопросы подробно, так как под тем, что вы хотите сказать, можно понимать что угодно. А будете флеймить не по делу - получите бан без каких либо сомнений.

Если просто хотите получить кусок строки (именно получить, а не обозначить, как было сказано), то
/^(.*?)img/im
Автор: JacobyD
Дата сообщения: 06.08.2009 16:49
спасибо
p.s. я хочу его обозначить... для замены, а не получить
Автор: board478
Дата сообщения: 14.09.2009 13:29
Добрый день, как получить с помощью рег. выражения второй блок на сайте, это кусок html странички и хочу получить всё что между
--------------------------------------------------------------------------
class="testclass" ............ это получить ........ class="testclass"
--------------------------------------------------------------------------

или получить весь блок class="testclass"
--------------------------------------------------------------------------
<div style="padding-left:5px;" class="testclass" border="1">
<p><b>fkjgnfjhntrj fgknfjh dfghnfdjkgn dfgng </b><div>uvjnv gjnjrkg tngjkb dkgndfjkg <div class="test25">
dfgkjhf dgkbdfjgb dgkjdfjkg dfgndfjgf</div></div><p>
</div>
--------------------------------------------------------------------------


вот блоки html которые интересуют
..........................
................................
<div style="padding-left:5px;" class="testclass" border="1">
<p><b>fkjgnfjhntrj fgknfjh dfghnfdjkgn dfgng </b><div>uvjnv gjnjrkg tngjkb dkgndfjkg <div class="test25">
dfgkjhf dgkbdfjgb dgkjdfjkg dfgndfjgf</div></div><p>
</div>

<div style="padding-left:5px;" class="testclass" border="1">
<p><b>fkjgnfjhntrj fgknfjh dfghnfdjkgn dfgng </b><div>uvjnv gjnjrkg tngjkb dkgndfjkg <div class="test25">
dfgkjhf dgkbdfjgb dgkjdfjkg dfgndfjgf</div></div><p>
</div>

<div style="padding-left:5px;" class="testclass" border="1">
<p><b>fkjgnfjhntrj fgknfjh dfghnfdjkgn dfgng </b><div>uvjnv gjnjrkg tngjkb dkgndfjkg <div class="test25">
dfgkjhf dgkbdfjgb dgkjdfjkg dfgndfjgf</div></div><p>
</div>
..........................
................................
Автор: Cheery
Дата сообщения: 14.09.2009 20:33
board478

Цитата:
или получить весь блок class="testclass"

/(<div[^<>]+class="testclass".*<\/div>)/Ui
что то такого вида
Автор: board478
Дата сообщения: 15.09.2009 15:21
проверил и не работает к большому сожалению (
Автор: Cheery
Дата сообщения: 15.09.2009 19:25
board478

Цитата:
проверил и не работает к большому сожалению

работает.. просто если есть переносы строк, то добавьте модификатор s

Цитата:
/(<div[^<>]+class="testclass".*<\/div>)/Usi

Автор: board478
Дата сообщения: 16.09.2009 16:01
да огромное преогромное спасибо!!!!!!

из-за такого вот нюанса кучу времени потярял!
спасибо за краткое и доходчивое объяснение )))))))))))))
Автор: vegaweb
Дата сообщения: 05.10.2009 16:59
Пытаюсь спарсить курс валют таким кодом

Код: if (preg_match('|<td align="Center">USD</td><td align="Center">100</td><td align="Left">доларів США</td><td align="Right">(.*)</td>|Usi',$str,$matches)) {
echo $matches[1];
} else {
echo "Нифига нету.";
}
Автор: andead
Дата сообщения: 05.10.2009 17:43
vegaweb
а входной текст где? телепатов нет
Автор: vegaweb
Дата сообщения: 06.10.2009 12:43
вобщем вот весь код

Код: <?
header("Content-Type: text/html; charset=utf-8");
$str =file_get_contents('http://www.bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx');

if (preg_match('|<td align="Center">USD</td><td align="Center">100</td><td align="Left">доларів США</td><td align="Right">(.*)</td>|Usi',$str,$matches)) {
echo $matches[1];
} else {
echo "Нифига нету.";
}

?>
Автор: Mamay
Дата сообщения: 06.10.2009 16:47
имхо для украины актуальнее вот эта инфа
http://content.finance.ua/ru
а то нацбанк часто лежит... )))
какой банк такой и сайт )
Автор: andead
Дата сообщения: 06.10.2009 17:31
vegaweb
скопировал ваш пример в файл, запустил, результат: 801.0000



в какой кодировке у вас скрипт?
Автор: mitiy
Дата сообщения: 07.10.2009 16:47
подскажите плиз. заменяю при выводе страницы втречающиеся в глоссарии термины на
<a href="url">термин</a> , но если в тексте встречаются ссылки и названии ссылки встречается термин, как например тут:
<a href="url">текст термин текст</a>
то preg_replace заменяет термин в названии ссылки тоже и весь код страницы портиться. как ограничить preg_replace чтобы он не трогал термины внутри названий уже существующих ссылок.

текущий код замены:
$glossary['str'] = "(\b|\B)".$glossary['str']."(\b)";
$row['full_story'] = preg_replace("'".$glossary['str']."'i", "<a href=\"".$glossary_link."\">".$glossary['str']."</a>", $row['full_story']);


пробую так:
$glossary['str'] = "(^2|\b|\B)".$glossary['str']."(^2|\b)(?!<\/a)";
выходит но только если термин стоит прямо перед </a> , показать что там могут быть ещё слова не получается
Автор: ForposT_ForeveR
Дата сообщения: 07.10.2009 19:16
Подскажите пожалуйста, как заменить в след. строке "\n" на "."
Строка начитается с двух символов $$


Код: $$string(здесь переход на новую строку и его заменить на . -точку)
Автор: kivan
Дата сообщения: 08.10.2009 11:05
ForposT_ForeveR

Код:
$result = preg_replace('/(\$\$.+)\n/', '$1.', $text);
Автор: Nukedx
Дата сообщения: 08.10.2009 22:46
Подскажите пожалуйста, как вырезать текст так:


Код: Англия, 1966 год: рок-н-ролл звучит по радио лишь два часа в неделю. Но в четырех милях от берега группа отчаянных...
Автор: vegaweb
Дата сообщения: 09.10.2009 12:43
andead
точно, трабла была в кодировке )
Спасибо за наводку!

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Xitami Web Server + PHP+ zend optimizer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.