Редакторы CAT

Regex в веб-редакторе (TMS)

Контент автоматически переведен с английского языка с помощью Phrase Language AI.

Поддержка regex в веб-редакторе ограничена реализацией системы Lucene Regex.

Чтобы использовать regex, включите Совпадение с использованием regex в настройки фильтра. Зеленая галочка в поле ввода фильтра указывает на успешную проверку корректного regex.

Запросы по умолчанию нечувствительны к регистру. Включите Совпадение с учетом регистра в настройки фильтра, чтобы сделать их чувствительными к регистру.

Совпадение слов (обеспечивающее совпадение только полных слов, а не подстрок внутри более длинных слов) недоступно.

Запрос ^abc$ будет работать как ожидается, т. е. находить весь сегмент, в то время как abc будет находить подстроку abc в любом тексте.

Ограничения

Корректная замена частично отформатированных запросов не поддерживается, например, поиск "Jméno: $1, Příjmení: $2." в тексте "First name<}: Bob, Last name: Dylan." будет заменен на “{>Jméno: Bob, Příjmení: Dylan

Неподдерживаемые шаблоны

  • Якорь границы слова \b, используемый для поиска точных слов (работает в редакторе для компьютера).

  • \\[1-9] — обратные ссылки (\1, \2 и т. д.), например, (\w+)\s+\1 для поиска повторяющихся слов, таких как “hello hello”

  • \(\?=|(\?!|(\?<=|(\?<! — просмотр вперед и назад, например, cat(?=\.jpg) для поиска “cat” только в “cat.jpg”

  • \(\?: — незапоминающие группы, например, (?:Mr|Mrs|Ms)\. \w+,, но запоминающие группы (Mr|Mrs|Ms)\. \w+ поддерживаются и находят такие имена, как “Mrs. Smith”, “Mr. Brown”

  • \(\?# — встроенные комментарии, например, \d{4}-(?# year)\d{2}-(?# month)\d{2}(?# day) для поиска “2025-06-25”

  • \(\?P<[^>]+> — именованные группы захвата, например, (?P<amount>\d+)\s?(?P<currency>USD|EUR) для поиска “150 USD” и “99 EUR”

Использование

Базовое сопоставление шаблонов

Точка (.) как заполнитель для любого одиночного символа

  • c.at: Совпадения: «chat», «coat». НЕ является совпадением: «cat», «cheat»

  • wa.ter: Совпадения: «waiter», «waster». НЕ является совпадением: «water»

  • s.ip: Совпадения: «skip», «ship», «slip». НЕ является совпадением: «sip», «strip»

Квантификаторы

? - Ноль или одно вхождение

  • colou?r: Совпадения: «color», «colour»

  • g?rain: Совпадения: «grain», «rain»

  • books?: Совпадения: «book», «books»

.* - Любое количество символов (включая отсутствие)

  • h.*y: Совпадения: «happy», «history», «honey»

  • sa.*d: Совпадения: «sad», «sand», «satisfied»

  • m.*ing: Совпадения: «morning», «meeting», «marketing»

.+ - Должен присутствовать как минимум один символ

  • pa.+er: Совпадения: «paper», «painter»

  • a.+ed» Совпадения: «asked», «accepted», «allowed»

* - Ноль или более вхождений

  • go*al: Совпадения: «goal», «goooooooal»

+ — одно или несколько вхождений

  • no+: совпадения: «no», «noooooo»

  • $1+: совпадения: «$1», «$11», «$111»

Рекомендуется использовать максимально конкретный шаблон, так как открытые шаблоны могут вызвать проблемы с производительностью в редакторе.

Важно

В редакторе есть встроенное ограничение на сложность шаблона регулярного выражения. Слишком широкие шаблоны или шаблоны, в которых активно используются подстановочные знаки, могут быть отклонены как недопустимые регулярные выражения. Чтобы избежать этого:

  • Используйте короткие и конкретные шаблоны. error-[0-9]\{3\} — это нормально; .*a.*b.*c.*d.* — нет.

  • Минимизируйте использование подстановочных знаков. Каждый .+ или .* увеличивает внутреннюю сложность. По возможности используйте классы символов, например [A-Z]+, вместо .*.

  • Избегайте длинных альтернатив с повторами. Шаблон вида (word1|word2|...|word20){2,} может быстро превысить лимит. Это усугубляется, если альтернативы включают несколько слов или знаков препинания, что увеличивает сложность регулярного выражения.

  • По возможности фиксируйте одну сторону. ^prefix.* гораздо менее ресурсозатратен, чем .*middle.*.

Если шаблон отклонен, попробуйте сделать его более точным: начните с более длинного фиксированного префикса и сужайте область поиска. Подумайте о сокращении количества альтернатив или их обработке в отдельных шаблонах вместо объединения всего в одно сложное регулярное выражение.

Пример:

Фильтрация адресов электронной почты:

  • Этот шаблон будет находить пробелы и все окружающие слова, что может привести к слишком большому количеству результатов: .*@.*

  • Чтобы ограничить результаты только адресами электронной почты: [\\w.+\\-]+@[\\w.+\\-]+

  • Чтобы ограничить результаты только адресами электронной почты .com: [\\w.+\\-]+@[\\w.+\\-]\\.com

  • Чтобы ограничить результаты теми, у которых есть цифра в адресах электронной почты: [\\w.+\\-]*\\d+[\\w.+\\-]*@[\\w.\\-]+

Альтернативы (оператор ИЛИ)

  • cat|dog: Находит: «cat» и «dog»

  • red|blue|green: Находит: «red», «blue», «green»

Классы и диапазоны символов

  • [A-Z]+: Находит одну или несколько заглавных букв подряд (последовательность).

  • [A-Z]{2,}: Находит любую серию заглавных букв (полезно, например, для поиска акронимов или Strings, написанных заглавными буквами)

  • [0-9]\{4\}: Находит четырехзначные числа, например «1999», «2003», «1876» (также находится внутри строки длиннее четырех символов; чтобы ограничить результаты, следует использовать запланированную на будущее опцию «Совпадение слов»)

  • [A-Za-z0-9]+: Находит любую буквенно-цифровую строку (hello! → hello совпадет, но ! не является частью [A-Za-z0-9]; 100% → совпадет только 100)

  • ([A-Za-z]+\\d+|\\d+[A-Za-z]+): Находит строго комбинацию цифр и букв, например «user123», «Admin99», «Win11», «5g», «1080p»

  • [0-9]{2,4}-[A-Z]{2,3}: Находит номерные знаки, например “12-XY”, “9999-ABC”

Экранирование зарезервированных символов . ? * { } [ ] ( ) \" \\

  • \\+[0-9]{1,2}: Находит «+40», «+1»

  • \\{version: [0-9]+\\}: Находит «{version: 12}», «{version: 13}»

  • C:\\\\[A-Za-z]+: Находит «C:\\Users», C:\\Documents, «C:\\Desktop»

Фильтрация с учетом и без учета регистра

  • По умолчанию фильтрация регулярными выражениями будет реализована без учета регистра. c.at: Находит: «chat», «Chat», «CHAT» и «coat», «Coat», «COAT»

  • регулярную фильтрацию можно комбинировать с учетом регистра фильтром пользовательского интерфейса

Группы захвата

Группы захвата регулярных выражений распознаются, и весь запрос подсвечивается, например, s(e)g подсветит \"seg\". Группы захвата можно использовать для замены, например, \"Name: Bob\" можно найти с помощью Name: (.*?) и заменить, используя обратную ссылку на Jméno: $1\". Отсутствующие обратные ссылки обрабатываются корректно, т.е. запрос Name: (.*?) с заменой Jméno: $1, Title: $2 будет заменен как Jméno: Bob, Title: $2.

Примеры для обратной ссылки при Заменить:

  • фильтровать (\\d+),(\\d+) и Заменить на $1.$2 для нормализации десятичных разделителей (например, с 5,6 или 35,949 на 5.6 или 35.949)

  • фильтровать (\\d+)\\.(\\d+) и Заменить на $1,$2 для нормализации десятичных разделителей (например, с 5.6 или 35.949 на 5,6 или 35,949)

  • фильтровать (\\d\{4\})-(\\d\{2\})-(\\d\{2\}) и Заменить на $3/$2/$1 для переформатирования даты (например, с 2025-06-05 на 05/06/2025)

  • фильтровать Идентификатор-(\\d{3,}) и Заменить на Ticket #$1 для извлечения номера заявки (например, из Идентификатор-45321 в Ticket #45321)

  • фильтровать (cat|dog) и Заменить на $1-$1 для того, чтобы Дублировать найденный текст (например, из cat в cat-cat и из dog в dog-dog)

  • Необязательная группа: фильтровать Hello(, (\\w+))? и Заменить на Hi $1 для преобразования приветствий путем замены \"Hello\" перед именами или отдельно (например, из Hello, John в Hi John и из Hello в Hi)

Была ли эта статья полезной?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.