|
|
|
| Только начал учить регулярные - очень туго идет :( Не подскажите, как из следующей строки вытащить: - дату (19.03)
- адрес ссылки (allnews/798348)
- Наименование ссылки (Любой текст)?
И каждое из 3-х значений закинуть в отдельный массив?
<tr><td width=1% align=right valign=top nowrap> <span class=newsdate>19.03 14:05</span></td><td width=99% align=left valign=top><a class=newsline href="/allnews/798348/" target="news798348">Любой текст</a></td></tr>
|
| |
|
|
|
|
|
|
|
для: TuX
(20.03.2007 в 01:51)
| | Можно поступить следующем образом
<?php
$str = '<tr><td width=1% align=right valign=top nowrap>
<span class=newsdate>19.03 14:05</span></td><td width=99%
align=left valign=top><a class=newsline href="/allnews/798348/"
target="news798348">Любой текст</a></td></tr>';
$pattern = "|([\d]{2}\.[\d]{2})[^>]+>[^>]+>[^>]+><a.+?href=\"([^\"]+)\"[^>]+>([^<]+)<|i";
preg_match_all($pattern, $str, $out);
unset($out[0]);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
$out - многомерный массив, чтобы взять нужные вам массивы обращайтесь к $out[1], $out[2] и $out[3]. | |
|
|
|
|
|
|
|
для: cheops
(20.03.2007 в 02:25)
| | Огромное спасибо! В целях обучения, не могли бы вы расшифровать регулярное выражение
([\d]{2}\.[\d]{2})[^>]+>[^>]+>[^>]+><a.+?href=\"([^\"]+)\"[^>]+>([^<]+)<
|
Я его например читаю так:
только две цифры подряд, потом точка, потом опять только 2 цифры подряд, потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа >, потом символ >, потом не понимаю <a.+? , потом href=\" (зпочему слеш мне понятно.), потом любой символ любое количество раз кроме символа ", потом кавычка ", потом любой символ любое количество раз, кроме символа >, потом символ >, потом любой символ любое количество раз, кроме символа <, потом <
не понял что делает вот это - .+?
Ну и еще вопросик, почему пишется все время \d, а не [0-9], разницы ведь нет? | |
|
|
|
|
|
|
|
для: TuX
(20.03.2007 в 02:53)
| | 1) Слеш перед \" потому что строка заключена в двойные кавычки - будет синтаксическая ошибка, если не экранировать.
2) . - это произвольный символ, .+ - как можно большее количество произвольных символов (не менее одной штуки), .+? - как можно меньшее количество произвольных символов (не менее одной штуки) - вопрос после .+ и .* - инвертирует жадность регулярных выражений.
>Ну и еще вопросик, почему пишется все время \d, а не [0-9], разницы ведь нет?
Не всегда пишется - оба варианта используются на равных, разницы действительно нет. Более того [0-9] пожалуй понадёжнее будет, так как не все диалекты регулярных выражений поддерживают \d. Классы символов удобны в других случаях, например, при замене пробельных символов \s или символов, образующих слово \w (попробуйте перечислить все символы во всех алфавитах - гораздо удобнее использовать \w). | |
|
|
|
|
|
|
|
для: cheops
(20.03.2007 в 03:39)
| | Все понял! Спасибо! | |
|
|
|