Регулярное выражение в C # для разбора тегов в стиле BBCode

#c# #regex

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

Вопрос:

Мне нужно регулярное выражение, которое соответствует некоторым тегам, заключенным в квадратные скобки. Ничего особенного, мне просто нужно, чтобы оно соответствовало тегам. Например, эти:

 [quote]  
[/quote]  
[b]  
[url]  
  

и т. д

Мне не нужно беспокоиться о закрытии тегов или о чем-либо еще. Я просто хочу получить коллекцию всех тегов в тексте. Мои знания регулярных выражений более чем ограничены.

Ответ №1:

Если вы не беспокоитесь о соответствии конца или вложенности или любых других глупых сложностях, это сопоставит и зафиксирует эти теги:

 ([[^]]*])
  

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

1. Идеально, это все, что мне было нужно. Не беспокоюсь о глупых осложнениях 🙂 Спасибо.

2. Хммм, кажется, есть проблема. Позвольте мне получить снимок экрана с результатом в expresso.

3. Вероятно, это улучшено либо с помощью класса [^]] , либо с помощью оператора lazy: ([[^]]*]) или ([.*?])

4. Понял. Это вся та штука с вложенностью, о которой я говорил 🙂 Я отредактирую этот ответ, чтобы использовать пример Пола, который обрабатывает этот случай

5. Спасибо, Эшелви. Я соглашусь через несколько минут, когда это позволит мне.

Ответ №2:

Следующее выражение должно работать при условии, что вас не волнует структура текста, заключенного в квадратные скобки: [[^]] ] . Если вы хотите ограничить использование буквенно-цифровых символов, [/?[A-Za-z0-9] ] будет работать. Или, если вам нужны только алфавитные символы, удалите 0-9 из набора символов.

Ответ №3:

@ashelvey: Это выражение является жадным и будет соответствовать слишком многим. ([.*?]) это была бы неохотная версия того же выражения.

Если вы хотите сопоставить только теги внутри, вы можете использовать (?<=[). ?(?=]) , используя lookbehind и lookahead.

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

1. Также, если вы хотите игнорировать закрывающие теги: (?<=[)[^/] ?(?=])