|
|
|
| Мужики, помогите на регулярках сарсить тайтл )
Я не понимаю, если после [\/+] добавлять [a-z]{5} и.т.п, то пропадает предыдущий результат.
Было:
Array ( [0] => Array ( [0] => title>тест</ ) )
|
После добавления:
Array ( [0] => Array ( [0] => title>тест
|
<?
$str = '<title>тест</title>';
if (preg_match_all("/[^<][a-z]{4,5}[$>][а-я]{4}[$<][\/+]/", $str, $matches)) {
print_r($matches);
} else echo "чето не то оО";
?>
|
И как вообще правильно парсить теги вида "<", "^" прямой слэш "/".
В мануале на софттайме сказано, что нужно экранировать спец.символы регулярных выражений, если мы хотим их найти, т.е ^ => ^\, $ => \$. Так получается?
А по поводу слэшей (прямых, обратных), что с ними-то делать? Тоже экранировать?
/ => /\
И чем отличаются скобки "[ ]" от "( )"? | |
|
|
|
|
|
|
|
для: man1
(09.01.2010 в 01:00)
| |
Слэш экранировать только обратный.
[ ] - задание диапазона знаков
( ) - логическое объединение
|
| |
|
|
|
|
|
|
|
для: man1
(09.01.2010 в 01:00)
| | Мужики, помогите на регулярках сарсить тайтл
<title>(?!</title>).*</title> | |
|
|
|
|
|
|
|
для: big-trot
(10.01.2010 в 11:50)
| |
или если необходимо исключить строки вида "<title></title>"
PS Под новые вопросы лучше заводить новые темы. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2010 в 13:08)
| | : ~AquaZ~
big-trot cheops
Спасибо за ответы, потренировался пописать регулярные выражения, вроде начало получаться.
Правда остался неясен момент с пробелами и переносом строк в html коде:
<?
/* Верхние примеры (см.низ)
#$file = "тел. <b>+7 903 787-6055</b><b></b>, Бэлла.";
#$file = "тел. +7 926 083-3466, Олеся.";
#$file = "тел. +7 926 479-9870, Лика.";
#$file ="тел. <b>+7 926 738-4638</b><b></b>, Юля.";
#$file ="тел. <b>+7 926 479-9870</b><b></b>, Лика.";
Верхние примеры (см.низ) */
$file ="<div class=\"info\">
тел. <b>+7 906 033-9791</b><b></b>, Мила .
";
/* Частично написал регулярное выр-ие,
но как быть с пробелом и переносом строки перед "тел." ?
Как их записать в регулярном выражении?
(
[0] => Array
(
[0] => <div class="info">
)
[1] => Array
(
[0] => <
)
[2] => Array
(
[0] => "info">
)
)
*/
if(preg_match_all("/(<+)[a-z]{3} [a-z]{5}=(\"[a-z]{4}\">)/", $file, $matches)) {
/* Парсинг примеров сверху, но он почему-то парсит только САМИ ПРИМЕРЫ, при реальном парсинге страницы ничего не находится...
#if(preg_match_all("/(<+)[a-z]{3} [a-z]{5}=(\"[a-z]{4}\">) \r\n [А-я]{3}/", $file, $matches)) {
#if(preg_match_all("/[А-я]{3}. <b>\+[0-9]{1} [0-9]{3} [0-9]{3}-[0-9]{4}<\/b><b><\/b>, [А-я]{1,}.+/", $file, $matches)) {
#if(preg_match_all("/тел. \+[0-9]{1} [0-9]{3} [0-9]{3}-[0-9]{4}, [А-я]{1,}./", $file, $matches)) {
*/
print_r($matches);
} else echo "не найдено";
?>
|
| |
|
|
|
|
|
|
|
для: man1
(10.01.2010 в 22:32)
| | Символ точка означает в регулярных выражениях либой символ, если вы хотите точку интерпретировать как знак припинания, то её необходимо экранировать.
А на счет переноса строк и пробелов почитайте про модификаторы. | |
|
|
|
|
|
|
|
для: big-trot
(10.01.2010 в 22:43)
| | Это вот это: http://www.codenet.ru/webmast/php/regexp2.php и вот это: http://depositfiles.od.ua/php/08.php#g ?
А можно какой-нибудь пример с модификаторами, если не сложно? На примерах лучше усваивается как-то =) | |
|
|
|
|