Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: <pre><code> & <p>
 
 автор: defi   (24.01.2011 в 16:55)   письмо автору
 
 

есть такой отрывок текста, взят из мануала php:

При использовании замены по шаблону с использованием ссылок
 на подмаски может возникнуть ситуация, когда 
непосредственно за маской следует цифра. В таком случае 
нотация вида \\n приводит к ошибке: ссылка на первую 
подмаску, за которой следует цифра 1, запишется как \\11, 
что будет интерпретировано как ссылка на одиннадцатую 
подмаску. Это недоразумение можно устранить, если 
воспользоваться конструкцией \${1}1, указывающей на 
изолированную ссылку на первую подмаску, и следующую за ней 
цифру 1. 

Пример 1. Использование подмасок, за которыми следует цифра

&lt;?php
$string = &quot;April 15, 2003&quot;;
$pattern = &quot;/(\w+) (\d+), (\d+)/i&quot;;
$replacement = &quot;\${1}1,\$3&quot;;
echo preg_replace($pattern, $replacement, $string);
?&gt; 

Результатом работы этого примера будет: April1,2003

Если во время выполнения функции были обнаружены совпадения
 с шаблоном, будет возвращено измененное значение subject, 
в противном случае будет возвращен исходный текст subject. 


Из этого текста мне нужно получить 4-ре параграфа и код заключённый в pre code,
для заключения кода делаю так:

$text = preg_replace("#(&lt;\?php.+?\?&gt;)#s", "<pre><code>\\1</code></pre>", $text);

А как теперь сделать 4-ре параграфа заключённые в <p></p>, не трогая то что идёт от <pre><code> и до </code></pre>, т.е. 2-ва параграфа, затем <pre><code>, и ещё 2-ва параграфа?
В принципе если бы не было в тексте кода, можно было записать например так:

$text = preg_replace("#(.+[^\s])#", "<p>\\1</p>", $text);

Помогите решить задачу.

  Ответить  
 
 автор: dima4321   (24.01.2011 в 19:52)   письмо автору
 
   для: defi   (24.01.2011 в 16:55)
 

<?php
ini_set
('display_errors',1);
error_reporting(E_ALL);

setlocale(LC_ALL'ru_RU.CP1251''rus_RUS.CP1251''Russian_Russia.1251');


$n='При использовании замены по шаблону с использованием 
ссылок на подмаски может возникнуть ситуация, когда 
непосредственно за маской следует цифра. В таком случае 
нотация вида \\n приводит к ошибке: ссылка на первую 
подмаску, за которой следует цифра 1, запишется как \\11, 
что будет интерпретировано как ссылка на одиннадцатую 
подмаску. Это недоразумение можно устранить, если 
воспользоваться конструкцией \${1}1, указывающей на 
изолированную ссылку на первую подмаску, и следующую за ней 
цифру 1. 

Пример 1. Использование подмасок, за которыми следует цифра 

&lt;?php 
$string = &quot;April 15, 2003&quot;; 
$pattern = &quot;/(\w+) (\d+), (\d+)/i&quot;; 
$replacement = &quot;\${1}1,\$3&quot;; 
echo preg_replace($pattern, $replacement, $string); 
?&gt; 

Результатом работы этого примера будет: April1,2003 

Если во время выполнения функции были обнаружены совпадения 
с шаблоном, будет возвращено измененное значение subject, в 
противном случае будет возвращен исходный текст subject.'
;


preg_match('/(.+?)\n\r(.+?)\n\r(.+?)\n\r(.+?)\n\r(.+)/si',$n,$match);

echo 
'<p>';
echo 
$match[1];
echo 
'</p>';
echo 
'<p>';
echo 
$match[2];
echo 
'</p>';

echo 
'<pre>';
echo 
$match[3];
echo 
'</pre>';


echo 
'<p>';
echo 
$match[4];
echo 
'</p>';
echo 
'<p>';
echo 
$match[5];
echo 
'</p>';




?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования