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 − Перенос строки.