myDC.ru

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

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

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

Теги
Нет тегов для показа
Accelerator
сообщение 22.12.2012, 9:10
Сообщение #1


Developer
******

Группа: Модераторы
Сообщений: 541
Регистрация: 11.11.2008
Из: Челябинск
Пользователь №: 1 075
Спасибо сказали: 241 раз




Возник вопрос с регулярными выражениями. Имеется скрипт для 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
Спасибо сказали: 1694 раза




Логично, что регулярное выражение [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 Важный вопрос
6 000000 1 103 2.9.2016, 10:33 Посл. сообщение: Артём
No New Posts Важный вопрос!
0 000000 976 16.8.2016, 1:28 Посл. сообщение: 000000
No New Posts От: вопрос по NMDC.
От темы с ID: 4932
0 MIKHAIL 1 994 25.1.2013, 19:48 Посл. сообщение: MIKHAIL
No New Posts вопрос по NMDC.
.
6 Lamo 4 979 29.5.2012, 19:35 Посл. сообщение: Lamo
No New Posts вопрос
5 kirovograd77 3 609 29.5.2012, 0:08 Посл. сообщение: kirovograd77
No New Posts Вопрос по Написанию Слрипта
1 mmk 2 163 20.5.2012, 13:37 Посл. сообщение: Saymon21
No New Posts Вопрос по регулярным выражениям
4 arktik 2 883 26.1.2012, 13:38 Посл. сообщение: Enyby
No New Posts Вопрос к экспертам по LUA
3 arktik 4 303 21.8.2011, 14:25 Посл. сообщение: arktik
No New Posts Вопрос про AntiFlood
3 arktik 3 096 10.8.2011, 14:29 Посл. сообщение: ShadoWx
No new Вопрос
Вопрос о PtokaX и НетБуке
27 STIVAN 8 819 22.6.2011, 21:36 Посл. сообщение: ustas
No New Posts Вопрос
4 the623 3 210 14.6.2011, 11:38 Посл. сообщение: the623
No New Posts Topic has attachmentsВопрос по доработке срипта StatPX как переделать...
12 Blazer 11 691 26.4.2011, 15:33 Посл. сообщение: Dani
Closed Topic has attachmentsВопрос по скрипту StatPX как сделать...
1 Blazer 3 490 19.2.2011, 19:55 Посл. сообщение: Accelerator
No New Posts От: Есть вопрос по скрипту
От темы с ID: 4623
0 ScOol 2 077 3.2.2011, 8:10 Посл. сообщение: ScOol
No New Posts Есть вопрос по скрипту
5 Sinsei 3 990 30.1.2011, 16:17 Посл. сообщение: AirKobra45

 



RSS Сейчас: 20.9.2017, 3:10