Regex, чтобы выбрать все входные данные между {и} - PullRequest
2 голосов
/ 02 января 2011

Я пытаюсь использовать регулярные выражения для выбора всех символов и слов между двумя знаками: { и } Я хочу сделать это для того, чтобы перевести некоторые файлы php tpl с помощью OmegaT или Trados.

Я уверен, что это довольно просто, но не смогу сделать это самостоятельно, кто-то может помочь?

Пример:

{if $smarty.session.id_admin && $sm.admin_panel}

вся эта строка должна быть выделена и помечена (для целей сегментации в OmegaT)

Ответы [ 6 ]

3 голосов
/ 02 января 2011
"\{(.+)\}"

Это все, что вам нужно.

\{ - для соответствия { символа, а \ - escape-символ, потому что { имеет специальное значение в регулярном выражении.

. означает, что каждый символ

+ означает, что один или несколько вхождений предыдущего

\} предназначены для совпадения } символа, а \ является escape-символом, поскольку } имеетособое значение в регулярном выражении.

(), как сказал @Gabi, для группировки, чтобы вы могли вспомнить, что соответствовало вашему регулярному выражению.

2 голосов
/ 02 января 2011

Если вы будете сопоставлять несколько наборов вещей в формате { stuff }, вам нужно убедиться, что вы не захватили } внутри своего матча:

/{([^}]*)}/

[^}] означает совпадение с любым символом, кроме }.

Если вы хотите сопоставить строки, вам нужно добавить параметр s:

/{([^}]*)}/s

Это будет работать так:

{ first one } and { second 
one }

Если вам нужно поддерживать вложенные наборы { stuff } (например, { a { b } }, то вам не повезло.

1 голос
/ 02 января 2011

/\{(.*)\}/ выполнит работу в PHP preg_match(), которую вы можете протестировать здесь, хотя вам потребуется другой метод для глобального захвата каждого события (т. Е. preg_match_all())

0 голосов
/ 03 января 2011

Это на самом деле потребует больше работы, чем вы думаете. Я не пользователь php, но если вы
намеревайтесь захватить содержимое «блоков», которые вам, возможно, придется учитывать при вложении,
экранированный {} внутри строк даже регулярные выражения. Возможно, вы захотите получить php токен
парсер для работы.

0 голосов
/ 02 января 2011

Попробуйте это:

\{([^}]*)\}

Ищет литерал '{', за которым следует любое количество символов, не являющихся '}', за которыми следует закрывающий литерал '}'.

0 голосов
/ 02 января 2011
{\(.*\)}

ИЛИ (в некоторых редакторах / инструментах):

\{\(.*\)\}
...