создание собственных коротких тегов с помощью регулярного выражения?

#regex #tags

#регулярное выражение #Теги

Вопрос:

Допустим, у меня есть следующее регулярное выражение с коротким тегом:

 [BANNER{([0-9]*)}{(site1|site2)}{([A-Z]*)}]
  

в принципе, у меня есть CMS, которая должна принимать этот короткий тег, например:

 [BANNER{23}{site1}{HELLO}]
  

и распечатать что-то вроде этого:

 <a href='http://site1.com?par1=23amp;par2=HELLO'>SOME TEXT</a>
  

Теперь это отлично работает всякий раз, когда я ввожу все эти 3 параметра, но как я могу сделать их необязательными?
чтобы он принимал любой из следующих параметров:

 [BANNER]
[BANNER{23}]
[BANNER{23}{site1}]
  

и будет выводиться что-то по умолчанию, я думал о создании группы захвата над каждой из фигурных скобок {} — но, думаю, я неправильно понял синтаксис.

Ответ №1:

Если я правильно понял вопрос, вы можете начать с

 [BANNER({([0-9]*)})?({(site1|site2)})?({([A-Z]*)})?]
  

Комментарии:

1. Это регулярное выражение создает слишком много групп, возможно, вы захотите исключить некоторые группы (?:)

2. @SeRPRo : Вы, конечно, правы. Я написал максимально простое решение, но оно оказалось не самым эффективным.

Ответ №2:

Это должно сработать:

 /[BANNER{([0-9]*)}(?:{(site1|site2)})?(?:{([A-Z]*)})?]/
  

Смотрите результат здесь