Ваша главная проблема в жадном жетоне ((?!\[\/\1\]).)*?
.
Во-первых, это неэффективно, поскольку вы определяете его количественно, а затем количественно определяете всю группу, в которой он находится, поэтому движок регулярных выражений ищет дополнительные способы сопоставления строки, и это делает ее довольно хрупкой.
Во-вторых, вы соответствуете только закрывающему тегу и не ограничивает начальный тег. Первый шаг - сделать /
перед \1
необязательным, \/?
. Он не остановится до [tag]
, как теги без атрибутов. Чтобы добавить поддержку атрибутов, добавьте необязательную группу после \1
, (?:\s[^]]*)?
. Он соответствует необязательной последовательности пробелов, а затем любых 0+ символов, кроме ]
.
Фиксированное регулярное выражение будет иметь вид
\[([biu]|h[123]|l(?:arge|ist)|small|table|grid)](?:(?!\[/?\1(?:\s[^]]*)?]).|(?R))*\[/\1]
Не забудьте скомпилировать его с regex.DOTALL
, чтобы оно совпадало с несколькими символами новой строки.
"Вы уверены, что имеете, сняли флажок с опцией настроек StyleCop, которая указывает, что stylecop должен проверить файлы разработчика? (Опции StyleCop> Правила> Подробные Настройки> Анализируют Файлы Разработчика)?"
http://stylecopforresharper.codeplex.com/Thread/View.aspx?ThreadId=47346
Вы можете полностью отключить ReSharper для определенного файла, нажав CTRL + 8 . Вы увидите, что маленький «глаз» в правом верхнем углу окна кода (вверху желоба) станет серым, что означает, что он отключен.
Нажмите клавишу еще раз, чтобы снова включить его.