Регулярные выражения

Pegas

Новичок
Регулярные выражения

Помогите написать регулярки. Есть HTML-страница

<html>
...мета-теги...
<body какие-то параметры>
...html-код...
<noindex>
...html-код...
coding0123
...html-код...
<noindex>
...html-код...
</body>
</html>

Задача: если "coding0123" заключен в тег <body> и не заключен в тег <noindex> выражение выполняется и результатом будет число "0123"

мои попытки написать регулярку привели к следующим результатам:
PHP:
$line=file_get_contents("index1.php");
preg_match("/<body(.*)>(.*)coding([0-9]*)(.*)<\/body>/is", $line, $matches);
если "coding0123" заключен в тег <body> выражение выполняется и результатом будет число "0123"
с тегом <noindex> получается такое:
PHP:
$line=file_get_contents("index1.php");
preg_match("/(?<!\<noindex\>)coding([0-9]*)/is", $line, $matches);
если перед "coding0123" нет <noindex>, тогда выражение выполняется и результатом будет число "0123", но работет только, когда <noindex>coding0123 - на одной строке, переходы на новую строку не понимает.
как вариант проверять так:
PHP:
 preg_match("/<noindex>(.*)coding([0-9]*)(.*)<\/noindex>/is", $line, $matches);
результатом явилось написание такой функции:
PHP:
function check_coding1($url)
  {
  $line=file_get_contents("$url");
  preg_match("/<noindex>(.*)<!--coding([0-9]*)-->(.*)<\/noindex>/is", $line, $matches);
  if (!isset($matches[0]))
    preg_match("/<body(.*)>(.*)<!--coding([0-9]*)-->(.*)<\/body>/is", $line, $matches1);
  if (isset($matches1[3]))
    return $matches1[3];
  else
    retunt false;
поможите решить задачку правильно и лучше....

-~{}~ 22.10.06 03:29:

неужели мое решение единственно правильное?
 

WP

^_^
Ы. Код не бывает правильным или неправильным. Бывает рабочий/нерабочий. Вариантов решения одной задачи - множество. И не стоит искать лучшее решение там где оно не нужно.
 

avm

Новичок
[offtop]
Имхо, инженеру всегда нужно искать именно лучшее решение - хорошая тренировка мозгов. Иначе начнется процесс идиотизации.

также код может быть неправильным, но рабочим. Хоть и рабочим не совсем так как нужно... ;)
[/offtop]
 

WP

^_^
Не так как нужно = не рабочий.
Ну дык пусть тренирует мозги, мы-то тут причем.
 

Pegas

Новичок
Нашлись сразу недостатки в функции. Если структура такая:

<html>
...мета-теги...
<body какие-то параметры>
...html-код...
<noindex>
...html-код...
</noindex>
...html-код...
coding0123
...html-код...
<noindex>
...html-код...
</noindex>
...html-код...
</body>
</html>

тогда результатом функции будет false. так как в проверке на noindex получается что код находится в теге noindex!

поэтому то я и просил помощи написать нормально рабочие регулярки, чтобы учлись и такие возможные положения кода в тексте html
 

Андрейка

Senior pomidor developer
поэтому то я и просил помощи написать нормально рабочие регулярки
вы какой-то странный доктор.. сами себе лечение назначаете, а название лекарства выбрать не можете... почему именно регулярки?
 

Pegas

Новичок
есть альтернатива? может посдскажите? буду признателен

-~{}~ 24.10.06 14:40:

не густо...придется самому покопаться еще...
 

Андрейка

Senior pomidor developer
Pegas
ну как альтернатива - вырезаецца текст от текущей позиции до следующего <noindex> ищется то, что надо в этом куске, ищется следующий блок </noindex>, обновляется текущая позиция в тексте...
 

Pegas

Новичок
имеенно над этим вариантом работаю :) хотя возможно и создание это одним регулярным выражением. это мое имхо
 
Сверху