Какой вкус регулярного выражения вы используете?Если это тот, который поддерживает собственнические квантификаторы, есть гораздо лучшая альтернатива:
\[\[(?:[^\]]++|\](?!\]))*+\]\]
[^\]]++
поглощает любые символы, кроме ]
, и не беспокоит сохранение информации о состоянии, которая сделала бы возможным возврат.Если он видит ]
, он просматривает, есть ли другой.Оборачивание всего этого в другой собственник-квантификатор означает, что он просматривает только всякий раз, когда видит ]
, и возвращается только один раз: когда он находит закрывающий ]]
.
Явные квантификаторы поддерживают Java, JGSoft, PCRE (PHP), Oniguruma (Ruby 1.9) и Perl 5.12.Все эти разновидности также поддерживают атомарные группы, которые можно использовать для достижения того же эффекта:
\[\[(?>(?:(?>[^\]]+)|\](?!\]))*)\]\]
. Аромат .NET поддерживает атомные группы, но не обладает квантификаторами владения.