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

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

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

 

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

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

тема: Помогите составить условие замены
 
 автор: sellerr   (11.12.2013 в 01:39)   письмо автору
40.8 Кб
 
 

Есть php скрипт который заменяет текст в файлах. Условия замены записаны в txt файле.
Пример условия: <replace>что меняем<|||>на что меняем<|||>наш префикс</replace>
Остальное опишу на картинке. Прошу подсказать как правельно составить условие для замены.

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 08:58)   письмо автору
 
   для: sellerr   (11.12.2013 в 01:39)
 

Нужно жадный поиск:
[^\t]*
заменить на нежадный:
[^\t]*?

  Ответить  
 
 автор: sellerr   (11.12.2013 в 22:04)   письмо автору
 
   для: Sfinks   (11.12.2013 в 08:58)
 

Чтото непомогло. Можете полностью код написать ?
Заранее благодарен.

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 22:08)   письмо автору
 
   для: sellerr   (11.12.2013 в 22:04)
 

Ну если бы вы написали его тут тестом, то я бы скопипастил и исправил. А перепечатывать с картинки не охото.

  Ответить  
 
 автор: sellerr   (11.12.2013 в 22:21)   письмо автору
138.5 Кб
 
   для: Sfinks   (11.12.2013 в 22:08)
 

заменить текст с 1513 по 1518 строку а именно

<table width="180" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6"><img src="/templates/00051/images/spacer.gif" width="6" height="1" alt="" /></td>
<td width="164" align="left" class="bltitle">Новости по дням</td>
<tr>
</table></td>


Напомню что в php файле условия замены берутся из txt файла, пример условия
<replace><table width="180" border="0" cellspacing="0" cellpadding="0">([\t]*)Новости по дням([^\t]*)</table></td><|||><|||>regex</replace>

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 22:29)   письмо автору
152 байт
 
   для: sellerr   (11.12.2013 в 22:21)
 

Для наглядности, сохраню файл замен сюда же.....
Ща ченить накрапаю....

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 22:48)   письмо автору
147 байт
 
   для: Sfinks   (11.12.2013 в 22:29)
 

А откуда там вообще \t ?
Вот с таким условием, все находится верно:
(ща код прикреплю.... пока мне файл нужен)

  Ответить  
 
 автор: sellerr   (11.12.2013 в 22:54)   письмо автору
 
   для: Sfinks   (11.12.2013 в 22:48)
 

какой именно файл нужен?

  Ответить  
 
 автор: Sfinks   (11.12.2013 в 22:57)   письмо автору
159 байт
 
   для: sellerr   (11.12.2013 в 22:54)
 

что ж вы так торопитесь.... См. вложение и код:
<?php
header
('Content-type: text/plain; charset=utf-8');

$replace file_get_contents('http://softtime.ru/forum/files/90524-20131211225717.txt');
preg_match_all('#<replace>(.*?)<\|\|\|>(.*?)<\|\|\|>(.*?)</replace>#si'$replace$replaces);

$source file_get_contents('http://softtime.ru/forum/files/90524-20131211222131.txt');

foreach(
$replaces[1] as $key => $pattern){
  
preg_match_all('#'.$pattern.'#s'$source$out);
}

print_r($out);

Результат
Array
(
    [0] => Array
        (
            [0] => <table width="180" border="0" cellspacing="0" cellpadding="0">
 <tr>
<td width="6"><img src="/templates/00051/images/spacer.gif" width="6" height="1" alt="" /></td>
<td width="164" align="left" class="bltitle">Новости по дням</td>
<tr>
 </table></td>
        )

    [1] => Array
        (
            [0] => 
 <tr>
<td width="6"><img src="/templates/00051/images/spacer.gif" width="6" height="1" alt="" /></td>
<td width="164" align="left" class="bltitle">
        )

    [2] => Array
        (
            [0] => >
        )

    [3] => Array
        (
            [0] => </td>
<tr>
 
        )

)

  Ответить  
 
 автор: sellerr   (11.12.2013 в 23:23)   письмо автору
 
   для: Sfinks   (11.12.2013 в 22:57)
 

Не работает ни в php ни в редакторе notepad++
В notepad++ работает только мое условие но нетак как мне надо... (захватывает много лишнего)

  Ответить  
 
 автор: sellerr   (11.12.2013 в 23:29)   письмо автору
119.2 Кб
 
   для: sellerr   (11.12.2013 в 23:23)
 

Давайте начнем заново.
Есть тхт файл (залил новый).
Нужно условие, которое удалит строки от 1510 до 1529

  Ответить  
 
 автор: sellerr   (11.12.2013 в 23:35)   письмо автору
 
   для: sellerr   (11.12.2013 в 23:29)
 

Условие <table width="180" border="0" cellspacing="0" cellpadding="0">((.(?!<table))+?)Новости по дням(.*?)</table></td> работает в notepad++ но если выбрать режым "с учетом переноса строк"... прошу допиляйте условие ))

  Ответить  
 
 автор: Sfinks   (12.12.2013 в 08:12)   письмо автору
 
   для: sellerr   (11.12.2013 в 23:35)
 

> Не работает ни в php
Что значит не работает? Не заменяет? Само собой. Надо же немного переработать скрипт. preg_match_all() - находит. А заменяет preg_replace(). Я просто показал, как должен выглядеть патерн.

> работает в notepad++
Вообще, о том, где предполагается использовать РВ следовало написать в самом первом посте. Я, например, notepad++ не пользуюсь. И не стал бы заморачиваться. Удивительно, что работает.

> но если выбрать режым "с учетом переноса строк"...
Так и должно быть. В моем php-скрипте для этого служит модификатор "s"

  Ответить  
 
 автор: sellerr   (12.12.2013 в 11:46)   письмо автору
 
   для: Sfinks   (12.12.2013 в 08:12)
 

Извените меня, но я немного натупил и не сказал сразу, что условие записываются в тхт файл и только в одну строку (точнее каждое новое условие с новой строки). Выходит что в строке (условию) нужно сразу указать возможность присутствия табуляции. Так что все условия из вашего скрипта нужно прописать в одну строку.

Насчет notepad++ там есть или просто поиск или замена с использованием регулярки... я просто тестировал условие, не менял, просто искал что найдет по такому то такому то условию.

Два часа читал про регулярные выражения, так и не нашол как правильно обьединить условия и указать исключения в условию )) Вот например:

<table>(тут все что угодно и даже возможен перенос строк но не содержит слово table>)</tr>table>

Обращаю внимание, что серединка содержит всё что угодно но не содержыт строку table> но заканчивается етой строкой ))

  Ответить  
 
 автор: sellerr   (11.12.2013 в 22:57)   письмо автору
 
   для: Sfinks   (11.12.2013 в 22:48)
 

Искомый текст по условию не в одной строке а с учетом табуляции.

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

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