#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]*)})?]/
Смотрите результат здесь