"Обезопасить" регулярку

Статус
В этой теме нельзя размещать новые ответы.

alexz15

Постоялец
Регистрация
3 Окт 2008
Сообщения
394
Реакции
194
Приветствую!

есть макрос:
[M_AKROS-{Z}-X-Y]

где
AKROS - любое слово строчными буквами от 3-х до 15 символов, разрешен символ "_"
Z - любые символы
а X-Y - числа от 1 до 999

подскажите плз регулярку, которая найдет строго по заданному макросу, т.е. если например в шаблоне будет макрос написан так:
[M_AKROS-{Z}-X-Y
или так:
[M_AKROS-{Z-X-]
или еще как-нибудь не верно, то чтобы он не обрабатывал его.

я сейчас делаю таким образом:
PHP:
while(strstr($templ, "[M_")){
    preg_match("#\[M_([A-Z\_]{3,15})-\{(.+?)\}-([0-9]{1,3})-([0-9]{1,3})\]#", $templ, $m);
}
но если написан неверно макрос, то скрипт начинает "думать".
 
PS.

AKROS - не строчные, а заглавные буквы :)
Z - любые символы, включая html
 
PHP:
while(strstr($templ, "[M_")){
    preg_match("#\[M_([A-Z\_]{3,15})-\{(.+?)\}-([0-9]{1,3})-([0-9]{1,3})\]#", $templ, $m);
}
Z, как я понимаю, все-таки не любые символы, а все символы, кроме }

PHP:
$templ = "
[M_AKROS-{zzzz}-1-133]
[M_AK_ROS-{zzzz}-1-133]
[M_AKROS-{zzzz-1-1]
[M_AK_ROS-{zzzz}-1-1334]
";
preg_match_all("#\[M_([A-Z_]{3,15})-\{[^}]*\}-([0-9]{1,3})-([0-9]{1,3})\]#", $templ, $m,PREG_SET_ORDER);
echo "<pre>";
print_r($m);
=>
Код:
Array
(
    [0] => Array
        (
            [0] => [M_AKROS-{zzzz}-1-133]
            [1] => AKROS
            [2] => 1
            [3] => 133
        )

    [1] => Array
        (
            [0] => [M_AK_ROS-{zzzz}-1-133]
            [1] => AK_ROS
            [2] => 1
            [3] => 133
        )

)
[]
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху