2012-07-05 4 views
0

Я должен совпадать с строки \begin{?} и \end{?} где ? является любое количество букв, цифр или символов * поэтому он должен соответствовать, например \begin{align} и \end{align*}.Regex для начать {?} И конец {?}

Я пытался это сделать, но я не уверен, что это неправильно

^\\begin{[^}]*}$ 

Старт с \begin{ после anything that's not } несколько раз и близко с }.

То же самое с \end{?}, но я бы хотел, чтобы он делал это внутри одного регулярного выражения, если это возможно.

+0

Как насчет гнездования? Если вы заботитесь о вложенности (например, '\ begin {foo} \ begin {foo} \ end {foo} \ end {foo}', то регулярные выражения явно неоптимальны. Если вы не заботитесь о вложенности, вероятно, не является идеальным, но было бы разумнее. –

+0

Да, внутри строки есть вложенность, но я заменяю все на «(ничего), поэтому, я думаю, это не должно быть проблемой ... или? – svenkapudija

ответ

3

Я думаю, что ниже регулярное выражение - это то, что вам нужно.

\\(begin|end){[a-zA-Z0-9*]+}

+0

Появилось дополнительное требование - если есть еще один '{SOMETHING}' (фигурные скобки) после первого, он также должен быть сопоставлен, поэтому '\ begin {array}' должен совпадать как '\ begin {array} {ll}' - так что вторые фигурные скобки необязательны? – svenkapudija

0

{} являются специальными символами, используемыми для выражения повторений, поэтому вам также необходимо избегать их.

^\\begin\{[^}]*\}$ 
+0

Не нужно скрывать «фигурные скобки» в классе символов. Это вводит в заблуждение – Cylian

+0

К сожалению, мои плохие исправлены. Те, кто по-прежнему нуждаются в ускорении. – Eelke

3

Ваше регулярное выражение:

\\(begin|end){.*?}

.* будет захватить что-нибудь между { }, и ? средство остановится, когда первая } приходит.

+0

Как я понимаю из вопроса, требование просто для буквенно-цифровых символов или '*' внутри '{}' скобок. Ваше выражение wil l соответствует любому персонажу –

+0

хороший забрать, мой плохой. @VamanKulkarni получил это отлично. – jared

Смежные вопросы