#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. Также, если вы хотите игнорировать закрывающие теги:
(?<=[)[^/] ?(?=])