Регулярка поиск-замена на php

S
На сайте с 06.08.2008
Offline
130
1059

Помогите составить регулярку на php

Нербходимо заменить код, начинающийся с:

if (count($var->bad_files)) {

echo <<<HTML
<table width="100%">
<tr>
<td colspan="2" style="padding:2px;">

И заканчивающийся:

echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">ok</td>
</tr>
HTML;

}

На:

echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">no</td>
</tr>
HTML;
LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#1

$newline=<<<EOF

echo <<<HTML

<table width="100%">

<tr>

<td style="padding:2px;" colspan="3">no</td>

</tr>

HTML;

EOF;

$text=preg_replace('@if \(count\(\$var->bad_files\)\) {.*?}@smi',$newline,$text);

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
S
На сайте с 06.08.2008
Offline
130
#2

Ваш вариант отрезает на первой закрытой кавычке, а их в "промежутке" много.

Зачем тут "<<<EOF"?

Оставил просто:

$newline='echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">no</td>
</tr>
HTML;
';

Приведу полный код. Нужно заменить вот ЭТО:

if (count($var->bad_files)) {

echo <<<HTML
<table width="100%">
<tr>
<td colspan="2" style="padding:2px;">{$lang['war_result']}</td>
</tr>
<tr>
<td width="350" style="padding:2px;">{$lang['war_file']}</td>
<td width="100">{$lang['war_size']}</td>
<td width="150">{$lang['addnews_date']}</td>
<td>&nbsp;</td>
</tr>
HTML;

foreach( $var->bad_files as $idx => $data )
{

if ($data['file_size'] < 50000) $color = "<font color=\"green\">";
elseif ($data['file_size'] < 100000) $color = "<font color=\"blue\">";
else $color = "<font color=\"red\">";

$data['file_size'] = formatsize ($data['file_size']);
if ($data['type']) $type = $lang['war_modified']; else $type = $lang['war_not'];

echo <<<HTML
<tr>
<td style="padding:2px;">{$color}{$data['file_path']}</font></td>
<td>{$color}{$data['file_size']}</font></td>
<td>{$color}{$data['file_date']}</font></td>
<td>{$color}{$type}</font></td>
</tr>
<tr><td background="fon.gif" height=1 colspan=4></td></tr>
HTML;
}
}
elseif ($_REQUEST['folder'] == "snap") {

echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">{$lang['war_creates']}</td>
</tr>
HTML;

}
else {

echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">{$lang['war_notfound']}</td>
</tr>
HTML;

}

На ЭТО:

echo <<<HTML
<table width="100%">
<tr>
<td style="padding:2px;" colspan="3">{$lang['war_notfound']}</td>
</tr>
HTML;
IL
На сайте с 20.04.2007
Offline
435
#3
spiderbuber:
Зачем тут "<<<EOF"?

Затем, чтоб не экранировать кавычки.. хотя, видимо, не актуально

$color = "<font color=\"green\">";
spiderbuber:
Приведу полный код. Нужно заменить вот ЭТО:

Открываем "продвинутый текстовый редактор" (Dreamweaver, Ultraedit, EmEditor.. даже утилита отдельная есть Text Replacer =)) CTRL+F или CTRL+R (в общем, найти и заменить), в верхнее окошко вставляем "ЭТО", в другое - то, что чуть ниже и тыкаем заменить в папке..

p.s. с небольшими "лишними" движениями можно и в notepad++ управиться..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 06.08.2008
Offline
130
#4

ivan-lev, тема называется "Регулярка поиск-замена на php", вопрос был "Помогите составить регулярку на php".

Какие нахрен редакторы?!!!

ЗЫ: Для чего мне это надо - это уже другой вопрос и к делу никак не относится..

siv1987
На сайте с 02.04.2009
Offline
427
#5
spiderbuber:
Зачем тут "<<<EOF"?

http://www.google.ru/search?client=opera&rls=ru&q=php+heredoc&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

'#if\s*\(count\(\$var->bad_files\)\)\s*\{.+?\{\$lang\[\'war_notfound\'\]\}</td>\s*</tr>\s*HTML;#is'
LovelAss
На сайте с 05.06.2009
Offline
96
#6

Попробуйте такой вариант:


<?php

if ( preg_match("#if\s*\(count\(\\\$var->bad_files\)\).*{.*}.*else.*{([^}]*{\\\$lang\['war_notfound'\]}.*)}#Uis", $string, $matches) ) {

$string = preg_replace("#if\s*\(count\(\\\$var->bad_files\)\).*{.*}.*else.*{([^}]*{\\\$lang\['war_notfound'\]}.*)}#Uis", trim($matches[1]), $string);
echo $string;

} else {

echo "Not found";

}

?>
S
На сайте с 06.08.2008
Offline
130
#7

siv1987, забыли про последнюю скобку - поправил сам, спасибо!

LovelAss, ваш вариант не проверял.. спасибо! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий