[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы с if в preg_replace
Schurik
Всем привет.
Можно ли в функции preg_replace использовать оператор if или чем нибудь его заменить?

В коде ниже вроде все правильно, но в нем выводится оператор2 в не зависимо от условия указанного в if.

код:
<?php

/* Вариант 1 */

$html = '{if[1==1]}1==1{[or]}1!=1{[end]}';
$html = preg_replace("#\\{if\\[(.*?)==(.*?)\\]\\}(.*?)\\{\\[or\\]\\}(.*?)\\{\\[end\\]\\}#is", ("$1"=="$2"?"$3":"$4"), $html);
echo $html;

/* Результат: 1!=1 */

/* ========= */

/* Вариант 2 */


$htmlx = 'if(1==1){1==1}else{1!=1}';
$htmlx = preg_replace("#if\\((.*?)==(.*?)\\)\\{(.*?)\\}else\\{(.*?)\\}#is", ("$1"=="$2"?"$3":"$4"), $htmlx);
echo $htmlx;

/* Результат: 1!=1 */

?>


В чем ошибка и как ее исправить?



Спустя 1 час, 18 минут, 3 секунды (9.09.2010 - 17:49) DedMorozzz написал(а):
Чудно построил. (.*)==(.*) под это условие попадаёт такое:
asdsad=12
Тут надо не так smile.gif А вот так:
(.*)==(\\number)

Далее - условия поддерживаются. Но делаются через ссылки. Это вот так:
(some text)? ... (?(number) ....)

Где number - номер скобок.

Спустя 32 минуты, 4 секунды (9.09.2010 - 18:21) Schurik написал(а):
Цитата
asdsad=12

А если надо будет написать RU==RU?
1==1 это просто пример, а суть скрыта тут ("$1"=="$2"?"$3":"$4").

Цитата
(some text)? ... (?(number) ....)

Что ты этим хотел сказать я не понял. unsure.gif

Спустя 5 минут, 26 секунд (9.09.2010 - 18:26) DedMorozzz написал(а):
Цитата
а суть скрыта тут ("$1"=="$2"?"$3":"$4").
Там не будет проверок. Там идёт замена. Хочешь проверку и далее с полученным результатом работать - юзай preg_replace_callback()
Насчёт Ру==Ру: (.*)==(\\1) . Т.е. \\1 - то же самое, что и в 1й скобке.
Цитата
Что ты этим хотел сказать я не понял

(.*)?... (?(1).....) - то что после ?(1) - будешь выполняться лишь при том условии, если условие в 1й скобке было верным, т.е. вхождение найдено.

Спустя 30 минут, 9 секунд (9.09.2010 - 18:56) Schurik написал(а):
Все спасибо разобрался, preg_replace_callback помогла. smile.gif
<?php
function
test($a,$b,$c,$d){
if($a==$b){
$content = $c;
}else{
$content = $d;
}
return $content;
}

$htmlx = 'if(1==1){1==1}else{1!=1}';
$htmlx = preg_replace("#if\\((.*?)==(.*?)\\)\\{(.*?)\\}else\\{(.*?)\\}#ies", "test('$1','$2','$3','$4')", $htmlx);
echo $htmlx;

или еще проще

$htmlx = 'if(1==1){1==1}else{1!=1}<br>if(1==2){1==2}else{1!=2}<br>if(RU==RU){RU==RU}else{RU!=RU}<br>if(RU==UA){RU==UA}else{RU!=UA}';
$htmlx = preg_replace("#if\\((.*?)==(.*?)\\)\\{(.*?)\\}else\\{(.*?)\\}#ies", "('$1'=='$2'?'$3':'$4')", $htmlx);
echo $htmlx;

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.