myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Вопрос по регулярным выражениям (не относится к lua)

Теги
Нет тегов для показа
Accelerator
сообщение 22.12.2012, 9:10
Сообщение #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 )

Регулярное выражение пытался подбирать на этом сайте: http://www.regextester.com/ но так ничего и не смог.
Go to the top of the page
+Quote Post
Setuper
сообщение 22.12.2012, 18:37
Сообщение #2


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Логично, что регулярное выражение [a-zA-Zа-яА-Я ]+ захватить всё до цифр.
В данном случае нельзя регулярным выражением захватить все, кроме подстроки.
Нужно либо захватывать по частям, например, так: ([a-zA-Zа-яА-Я ]+)\d*([a-zA-Zа-яА-Я ]+)
и после этого сконкатенировать два полученных отрезка, либо же нужно использовать какую-то функцию, которая делает замену по регулярному выражению. Что-то типа:
Код
ReplaceAll(str, "[\d]*", "")
если такая есть в приведенным тобою языке.


Спасибо сказали:
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Вопрос по функции
0 000000 4 373 7.1.2018, 12:55 Посл. сообщение: 000000
No New Posts Важный вопрос
6 000000 8 609 2.9.2016, 10:33 Посл. сообщение: Артём
No New Posts Важный вопрос!
0 000000 5 047 16.8.2016, 1:28 Посл. сообщение: 000000
No New Posts От: вопрос по NMDC.
От темы с ID: 4932
0 MIKHAIL 5 458 25.1.2013, 19:48 Посл. сообщение: MIKHAIL
No New Posts вопрос по NMDC.
.
6 Lamo 13 214 29.5.2012, 19:35 Посл. сообщение: Lamo
No New Posts вопрос
5 kirovograd77 10 376 29.5.2012, 0:08 Посл. сообщение: kirovograd77
No New Posts Вопрос по Написанию Слрипта
1 mmk 5 856 20.5.2012, 13:37 Посл. сообщение: Saymon21
No New Posts Вопрос по регулярным выражениям
4 arktik 7 493 26.1.2012, 13:38 Посл. сообщение: Enyby
No New Posts Вопрос к экспертам по LUA
3 arktik 10 099 21.8.2011, 14:25 Посл. сообщение: arktik
No New Posts Вопрос про AntiFlood
3 arktik 7 824 10.8.2011, 14:29 Посл. сообщение: ShadoWx
No new Вопрос
Вопрос о PtokaX и НетБуке
27 STIVAN 25 317 22.6.2011, 21:36 Посл. сообщение: ustas
No New Posts Вопрос
4 the623 8 588 14.6.2011, 11:38 Посл. сообщение: the623
No New Posts Topic has attachmentsВопрос по доработке срипта StatPX как переделать...
12 Blazer 22 795 26.4.2011, 15:33 Посл. сообщение: Dani
Closed Topic has attachmentsВопрос по скрипту StatPX как сделать...
1 Blazer 7 641 19.2.2011, 19:55 Посл. сообщение: Accelerator
No New Posts От: Есть вопрос по скрипту
От темы с ID: 4623
0 ScOol 4 873 3.2.2011, 8:10 Посл. сообщение: ScOol

 



RSS Сейчас: 4.10.2024, 23:29