Редакторы CAT

Регулярные выражения в веб-редакторе (TMS)

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

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

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

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

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

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

Ограничения

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

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

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

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

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

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

  • \(\?# - Встроенные комментарии, например, \d{4}-(?# год)\d{2}-(?# месяц)\d{2}(?# день) для совпадения с “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”

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

  • нет+: Совпадения: “нет”, “нетуууу”

  • $1+: Совпадения: “$1”, “$11”, “$111”

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

Важно

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

  • Держите шаблоны короткими и специфичными. error-[0-9]{3} нормально; .*a.*b.*c.*d.* - нет.

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

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

  • Закрепите одну сторону, когда это возможно. ^prefix.* гораздо дешевле, чем .*middle.*.

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

Пример:

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

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

  • Чтобы ограничить результаты всеми адресами электронной почты: [\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,}: Совпадения с любой серией заглавных букв (полезно, например, для совпадения с аббревиатурами или строками, написанными заглавными буквами)

  • [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". Группы захвата могут быть использованы для замены, например, “Имя: Боб” можно найти по Имя: (.*?) и заменить, используя обратную ссылку на Имя: $1.” Недостающие обратные ссылки обрабатываются корректно, т.е. запрос Имя: (.*?) с заменой Имя: $1, Заголовок: $2 будет заменен на Имя: Боб, Заголовок: $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)

  • фильтровать ID-(\d{3,}) и заменить Билет #$1 для извлечения номера билета (например, с ID-45321 на Билет #45321)

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

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

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

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.