Регулярные выражения (RegEx) — просто
Что такое регулярное выражение, где FlowBotCommander его предлагает (заголовок окна, Проверить текст) и десять символов, которые действительно нужны — с примерами из игр.
В двух местах FlowBotCommander предлагает тип совпадения Регулярное выражение. Оно вам не обязательно — «содержит», «начинается с» и «заканчивается на» почти всегда достаточно. Но когда текст постоянно меняется (числа, время, счётчики вкладок в заголовке окна) или OCR путает буквы, небольшой шаблон выручает. Эта статья объясняет ровно столько RegEx, сколько для этого нужно.
Что такое регулярное выражение?
Регулярное выражение (коротко RegEx) — это шаблон, описывающий, как может выглядеть текст, вместо
фиксированного слова. «Содержит Золото» подходит только к слову Золото. Шаблон Золото: \d+ подходит к
«Золото: 5», «Золото: 120», «Золото: 99999» — любому числу после «Золото: ».
Обычные буквы и цифры в шаблоне обозначают сами себя. Значение имеют лишь несколько специальных символов:
| Символ | означает | Пример | подходит к |
|---|---|---|---|
. |
любой один символ | L.vel |
Level, Lövel, L3vel |
\d |
одна цифра 0–9 | Lv \d |
Lv 1, Lv 7 |
+ |
предыдущее один или несколько раз | \d+ |
5, 12, 99999 |
* |
предыдущее ноль или несколько раз | Золото *\d+ |
Золото5, Золото 5, Золото 5 |
? |
предыдущее необязательно (0 или 1 раз) | Lv\.? \d+ |
Lv 3, Lv. 3 |
^ |
начало текста | ^Победа |
«Победа!» — но не «Нет победы» |
$ |
конец текста | Editor$ |
«Doc – Editor» |
[abc] |
один из этих символов | Lv[. :] |
Lv. / Lv: / Lv␣ |
[0-9] |
один символ из диапазона | [1-3] |
1, 2 или 3 |
a|b |
a или b | Победа|Victory |
Победа или Victory |
\. |
настоящая точка (а не «любой символ») | 1\.5 |
1.5 — но не 1x5 |
Спецсимволы, которые нужны буквально (. + * ? ( ) [ ] | $ ^), получают обратную косую
черту: \. \+ \(. Регистр в FlowBotCommander не важен — победа подходит и к «ПОБЕДА».
Где RegEx в FlowBotCommander
1. Заголовок окна — тип совпадения «Регулярное выражение»
В Старт (глобальный тип совпадения), Переключить источник изображения, Окно на передний план, Переместить/Изменить размер окна и узлах оверлея вы выбираете, как сравнивается заголовок окна (см. Окно и источник изображения). Обычно хватает содержит. RegEx нужен, когда два окна называются похоже:
| Ситуация | Шаблон | Пояснение |
|---|---|---|
| Только вкладка браузера с игрой, а не вкладка с вики | ^Clicker Heroes |
заголовок должен начинаться с «Clicker Heroes» |
| Заголовок чередуется «Игра (1)», «Игра (2)» … | ^Игра \(\d+\)$ |
скобки буквально, между ними число |
| Ровно «Editor» в конце, что бы ни было перед | Editor$ |
заголовок заканчивается на Editor |
| Английский или немецкий клиент | Inventory|Inventar |
один из двух |
2. Проверить текст — режим «Регулярное выражение»
Узел условия Проверить текст сравнивает текст (обычно из Чтение текста (OCR)) с вашим шаблоном и на выходе Результат даёт истину или ложь — её подключают к Ветвлению (см. Циклы и условия). Примеры:
| Хотите узнать … | Шаблон | подходит, например, к |
|---|---|---|
| Есть ли в тексте хоть какое-то число? | \d+ |
«Золото 250» |
| Число от 100 (три цифры и больше)? | \d{3,} |
100, 2500 — но не 99 |
| Бой окончен — на любом языке? | Победа|Victory|Поражение|Defeat |
«VICTORY!» |
| Идёт обратный отсчёт (мм:сс)? | \d\d:\d\d |
«02:59» |
| Есть «Level» плюс число, хотя OCR съедает точку? | L[ev]*\.? *\d+ |
«Lv. 5», «Lvl 5», «Level 5» |
Для чисел RegEx нужен редко: для «Золото ≥ 50» лучше взять Число из текста (вытаскивает первое число из текста) и затем Сравнить число — это читается без шаблона. RegEx окупается для слов, форматов и «любого из».
Ловим ошибки OCR
Распознавание текста охотно читает «Lv. 1» как «L"; 1» или «0» как «O» (см. Чтение текста (OCR)). Вместо того чтобы в десятый раз двигать область, сделайте шаблон терпимым:
- Перепутанные буквы как набор:
[O0]подходит к O и 0,[Il1]— к I, l и 1. - Ненадёжные символы сделать необязательными:
Lv\.? ?\d+допускает точку и пробел — или нет. - Проверять только надёжную часть: вместо «Готов к бою!» достаточно
Готов.
Как проверить шаблон
- Создайте узел Проверить текст, режим Регулярное выражение, введите шаблон.
- На вход подключите переменную с примером текста (или сразу узел OCR).
- Запустите бота через F5 и посмотрите в журнал: узел пишет «Text-Prüfung ⇒ True» или «False».
- Стройте шаблон по шагам: сначала
Золото, потомЗолото \d, потомЗолото \d+— так сразу видно, какая часть не подходит.
Если не получается: неверный шаблон (например открытая скобка () заставляет узел всегда давать ложь —
без сообщения об ошибке. Самые частые причины: точка без обратной косой черты (1.5 подходит и к «125»),
забытый + (\d подходит только к одной цифре), пробелы в тексте, которых нет в шаблоне. В сомнениях
начинайте с содержит и короткого слова — RegEx только если этого мало.