parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Maxx 08.02.2008 16:53 / 08.02.2008 17:04

Это внешний формат? Если это вы сами придумали - советую сменить технологию.

одним матчем - это принципиально?

если одним то _примерно_ так:
$str[<здесь текст>]
$str[^str.match[
   ([!|\^{])
   ([^^!|\^}]+)
   ([!|\^}])
][gx]{
   ^switch[$match.1]{
     ^case[|]{<--Ваше 1--}
     ^case[!]{<--Ваше 2--}
     ^case[^{]{<--Ваше 3--}
  }
}]
Не уверен, что это сразу заработает, не проверял. К тому же сразу видны некоторые ограничения - внутри блока недопустимы какие либо символы-ограничители блоков, их нужно экранировать (это обычная проблема). Если они возможны - читайте про опережающие проверки в регулярных выражениях.