Web-мастер: курс молодого бойца

Замена тегов

   

 Добавлено 2009-03-03 00:40:52
EugeneS


Сообщений: 69
Зарегистрирован: 22.02.2009

Цитировать
Нужно заменить все теги вида <hi class="..." align="..." >текст</hi> на <hi 'мое содержимое'>текст</hi>; i=1..7

Убирать содержимое я уже могу, но только для каждого отдельного тега.

$str = preg_replace( "/<h1(.*)>/Ui", "<h1>", $str );
$str = preg_replace( "/<\/h1>/Ui", "</h1>", $str );

Ключ U, если я правильно понял, для того чтобы искать наиболее короткие варианты. Например, если есть текст
Цитата
<h1 class="..." align="..." >текст1</h1> <h1 class="..." align="..." >текст2</h1>
то без U под первый шаблон попадает весь текст. То есть вся строка может превратиться в <h1>. U спасает или я ошибаюсь?

Основной вопрос: можно ли как-то менять замещающую строку в зависимости от найденной строки? То есть считывать i и передавать его на замену?
Наверх  Посмотреть профиль   Отредактировано автором 03.03.2009

 Добавлено 2009-03-03 10:32:39
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
<?php
$text 
file_get_contents('index.html');
$pattern '#<h([1-6])[^>]*>(.*)</h\\1>#iUs';
$replacement '<h\\1 \'мое содержимое\'>\\2</h\\1>';
$res preg_replace($pattern$replacement$text);
?>



Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора  

 Добавлено 2009-03-03 19:31:35
EugeneS


Сообщений: 69
Зарегистрирован: 22.02.2009

Цитировать
Цитата
$pattern = '#<h([1-6])[^>]*>(.*)</h\\1>#iUs';
С ключем U все равно необходимо применять [^>]* ?

Не совсем понятно как определяется порядок и нумеруются подвыражения.

Не понятно обозначение \\2
\\ = '\'
как быть если если в тексте нужно буквально найти '\2'
Наверх  Посмотреть профиль   Отредактировано автором 03.03.2009

 Добавлено 2009-03-04 15:33:33
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
EugeneS пишет:
Не совсем понятно как определяется порядок и нумеруются подвыражения.
\\0 (либо $0) соответствует вхождению всего шаблона
\\1 (либо $1) соответствует первой подмаске
\\2 (либо $2) соответствует второй подмаске

...(...(...)...(...)...)...
\\1 - (...(...)...(...)...)
\\2 - (...)
\\3 - (...)

Я использую \\1 в $pattern потому как мне надо сослаться на тот заголовок, который мы нашли. Если было найдено совпадение с h2, то \\1 ссылается на 2, а если был найден h5, то \\1 ссылается на 5:
#<h([1-6])[^>]*>(.*)</h\\1>#iUs


Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 17.03.2009

 Добавлено 2009-03-17 07:04:28
EugeneS


Сообщений: 69
Зарегистрирован: 22.02.2009

Цитировать
Нужно сделать замену выражений, так чтобы например 2^{3^{n}}
заменялось на 2<SUP>3<SUP>n</SUP></SUP>

Цитата
$pattern = '#\^\{(.+)\}#is';
$replacement = '<SUP>\\1</SUP>';
$text = preg_replace($pattern, $replacement, $text );
этот шаблон заменяет только один раз
Наверх  Посмотреть профиль    
   
Быстрый ответ
 
Цвет шрифта: Закрыть все теги
Сообщение
Защитный код