|
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
![]()
Сообщение
#1
|
|
![]() Developer ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза ![]() |
Возник вопрос с регулярными выражениями. Имеется скрипт для Sourcemod'а
Код #include <sourcemod> #include <regex> new Handle:g_Regex = INVALID_HANDLE; public OnPluginStart() { g_Regex = CompileRegex("([a-zA-Zа-яА-Я ]+)"); } public bool:OnClientConnect(client, String:rejectmsg[], maxlen) { return CheckName(client); } public bool:CheckName(client) { if (IsFakeClient(client)) return true; new String:clientname[128]; GetClientName(client, clientname, sizeof(clientname)); new String:buf[64]; new index = MatchRegex(g_Regex, clientname); for (new i = 0; i < index; i++) { GetRegexSubString(g_Regex, i, buf, sizeof(buf)); } if (strlen(buf) < 1) { KickClient(client, "Bad name!"); return false; } SetClientInfo(client, "name", buf); return true; } Данный скрипт должен отбирать из имени игрока только символы, которые удовлетворяют регулярному выражению. Но работает не так, как нужно. Вот пример: Ник: Tester 174 Test На выходе: Tester А должно быть: Tester Test Помогите правильно подобрать регулярное выражение. То, что находит скрипт: matches: 0: (Tester ) 1: (Tester ) Регулярное выражение пытался подбирать на этом сайте: |
|
|
![]()
Сообщение
#2
|
|
![]() RusHub team lead ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз ![]() |
Логично, что регулярное выражение [a-zA-Zа-яА-Я ]+ захватить всё до цифр.
В данном случае нельзя регулярным выражением захватить все, кроме подстроки. Нужно либо захватывать по частям, например, так: ([a-zA-Zа-яА-Я ]+)\d*([a-zA-Zа-яА-Я ]+) и после этого сконкатенировать два полученных отрезка, либо же нужно использовать какую-то функцию, которая делает замену по регулярному выражению. Что-то типа: Код ReplaceAll(str, "[\d]*", "") если такая есть в приведенным тобою языке.
|
|
|
![]() ![]() |
Похожие темы
![]() |
Сейчас: 8.9.2024, 2:50 |