Вопросик на счёт кода

Помощь в написании скриптов для игр.
Vladik2304
Posts: 24
Joined: 20 Jan 2022, 15:58

Вопросик на счёт кода

Post by Vladik2304 » 27 Jan 2022, 11:02

Code: Select all

!4::
FileRead, Str, %A_MyDocuments%\q.txt
StringReplace, Str, Str, `r`n, `n, 1
StringReplace, Str, Str, `r, `n, 1
RegExMatch("`n" Str "`n", "i).*\n\[\d+:\d+:\d+]\s*\ .*?\[.*?] : \s*(/`*.*?(\d+)\s.*?)\n", Match)
SendMessage, 0x50,, 0x4190419,, A
SendInput, {F6}/z %match2%{Enter}
Return
[Mod edit: [code][/code] tags added.]

Какое вообще значение оно будет помещать в Match?
("`n" Str "`n", "i).*\n\[\d+:\d+:\d+]\s*\ .*?\[.*?] : \s*(/`*.*?(\d+)\s.*?)\n" - что значит эта строка?

mcl
Posts: 355
Joined: 04 May 2018, 16:35

Re: Вопросик на счёт кода

Post by mcl » 28 Jan 2022, 15:02

Vladik2304 wrote: Какое вообще значение оно будет помещать в Match?
("`n" Str "`n", "i).*\n\[\d+:\d+:\d+]\s*\ .*?\[.*?] : \s*(/`*.*?(\d+)\s.*?)\n" - что значит эта строка?
Эта строка − регулярное выражение, т.е. особым образом описанный шаблон, на соответствие которому проверяются другие строки.
Регулярные выражения читать без подготовки непросто, а это ещё и написано довольно небрежно, но можно выделить следующее:
− в начале строки должен быть кусок текста с временной меткой вроде [12:45:56];
− дальше, по-видимому, имя пользователя и его id в квадратных скобках;
− после двоеточия − текст, который захватывается целиком и попадает в переменную match1;
− в этом тексте первое встреченное число тоже захватывается и попадает в переменную match2.

Сам шаблон можно разбить на части, которые должны в этом же порядке встретиться в проверяемой нами строке:
i) − Флаг нечувствительности к регистру. Так как в выражении нет букв, здесь он не имеет смысла.
.* − Произвольный текст. Точка означает любой символ, а звёздочка после него − произвольное количество раз (включая ноль).
\n − Перенос строки.
\[ − Открывающая квадратная скобка. Все виды скобок в регулярках имеют особые значения, поэтому, чтобы она была воспринята буквально, в начале стоит слэш.
\d+ − Одна или более цифр. \d означает цифру (0−9), а плюс − произвольное количество раз (не менее одного).
: − Двоеточие. Специального значения не имеет, так что трактуется буквально.
Последние два блока повторяются несколько раз.
] − Закрывающая квадратная скобка. Вообще-то тоже должна быть экранирована слэшем.
\s* − Произвольное количество пробелов. \s включает в себя пробелы, табы и переносы строк.
.*? − Произвольный текст. Вопросительный знак значит, что должен быть найден самый короткий подходящий текст.
\[.*?] − Произвольный текст в квадратных скобках. Вообще говоря, закрывающая скобка тоже должна быть экранирована слэшем.
: − Пробел-двоеточие-пробел.
\s* − Произвольное количество пробелов.
( − Круглые скобки в регулярных выражениях используются для группировки и захвата текста. Именно захваченный текст попадает в переменную match1.
/`* − Прямой слэш и произвольное количество backtick'ов. Эта часть мне неясна − в чат-логе такое не встречалось.
.*? − Произвольный текст.
(\d+) − Ещё одни круглые скобки − вторая захватываемая часть, соответственно, она попадёт в переменную match2. Захватывается, как видим, некоторое количество цифр.
\s.*?) − Пробел, произвольный текст и конец первого захватываемого текста.
\n − Перенос строки.
github://oGDIp - GDI+ wrapper for AHK v1.1

Post Reply

Return to “Скрипты для Игр”