myDC.ru

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

 
3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему

> Несколько Слов О Захватах И Регулярных Выражениях, исключительно для разработчиков

Ksan
сообщение 4.3.2012, 3:56
Сообщение #41


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




MIKHAIL:
Код
local sFilePath = "http://sHostName/sDir1/sDir2/sDir3/sDirN/sFileName.sExt"
local sFileName = sFilePath:gsub(".-/", "")


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 4.3.2012, 12:23
Сообщение #42


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




Ksan, наверное, имел в виду:
Код
local sFileName = sFilePath:gsub(".*/", "")
Go to the top of the page
+Quote Post
Setuper
сообщение 4.3.2012, 13:16
Сообщение #43


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

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




Реверс делать не эффективно. Эффективнее ограничиться правильной регуляркой.
Замена gsub тоже не эффективный вариант, так как заменять каждый символ затратно.

Вариант 1:
Код
local sFileName = sFilePath:match".+/(.*)$"


Вариант 2:
Код
local sFileName = sFilePath:match"[^/]*$"


В случае если после последнего слеша ничего нету, то в обоих вариантех получим пустую строку.
В случае если слешей вообще нету, то в первом варианте получим nil, во втором варианте получим всю строку.

Какой вариант лучше - решать самому скриптописателю.


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 4.3.2012, 21:21
Сообщение #44


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Setuper, я имел в виду именно то, что написал.
Перед написанием сюда я проверил у себя.
Но если настаиваешь на "*" вместо "-", то было бы проще сразу написать, почему (именно для данного случая), потому что правильный ответ выдаёт и так и иначе. При любых видоизменениях исходного текста пути.
Go to the top of the page
+Quote Post
GULAM33
сообщение 5.10.2012, 8:15
Сообщение #45


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




У меня деликатный вопрос по поводу регулярных выражений. Функция sData = string.gsub скрипт анти-мат.
Например, надо поймать матерное слово [X][Y][Z]
sData = string.gsub(sData, "[X][Y][Z]",
Но [X][Y][Z] - является продолжением допустимого слова [a][b][c][d]-[X][Y][Z].
А так же [X][Y][Z] является началом другого допустимого слова [X][Y][Z]-[a][b][c][d].
И ещё [X][Y][Z] является внутренней частью (корень, суффикс) слова [a][b][c][d]-[X][Y][Z]-[a][b][c][d]

sData = string.gsub(sData, "%s[бX][лY][яZ]%s", replWord) , где replWord - замена мата на безобидное слово, %s - пробельный символ.
Исключения: <оскор_бля_ть>, <о_бля_пать> и так далее.

-При детектировании необходимо опускать допустимые слова, то что у меня получилось введение пробела %s

Необходимо фиксировать слово когда юзер пишет в чат сразу после своего nick'a [X][Y][Z], без пробела на конце.
Выводится в чат, если вводить просто запрещенное слово без пробела между ником и словом и без пробела после слова:
01:20:03 <NICK> XYZ

Как исправить эту ситуацию, какое регулярное выражение необходимо применить?
Go to the top of the page
+Quote Post
Setuper
сообщение 5.10.2012, 9:23
Сообщение #46


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

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




Код
"%sXYZ$"


Если скрипт для PtokaX, то предварительно нужно удалить символ | с конца строки, или же писать так:
Код
"%sXYZ|$"
Go to the top of the page
+Quote Post
GULAM33
сообщение 5.10.2012, 16:20
Сообщение #47


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




Спасибо, я подозревал о наличии "невидимого пробела" .
Go to the top of the page
+Quote Post
GULAM33
сообщение 10.10.2012, 1:15
Сообщение #48


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




Выяснил следующее. Одного вида захвата будет не достаточно.
Так как захват "%sСЛОВО|$" будет работать в случае, если после СЛОВА не будет пробела. А так выводит в чат
Поэтому необходимо СЛОВО захватить двумя разными захватами чтобы запрещённые слова не выводились в чат: "%sСЛОВО|$" и "%sСЛОВО%s".
Go to the top of the page
+Quote Post
GULAM33
сообщение 13.10.2012, 2:06
Сообщение #49


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




Данный символ " является инструментом для захвата. Является ли символ магическим. Как экранировать данный символ? Пример экранирования любого магического символа мне не помог. (%.) и (%") .
Go to the top of the page
+Quote Post
Saymon21
сообщение 13.10.2012, 2:21
Сообщение #50


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




Цитата
Как экранировать данный символ?

Код
string = "\"Hello world\""

Тоже самое будет и для одинарных ковычек.
Go to the top of the page
+Quote Post
GULAM33
сообщение 14.10.2012, 1:12
Сообщение #51


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




А захват данного символа как осуществить?
Go to the top of the page
+Quote Post
Setuper
сообщение 15.10.2012, 9:06
Сообщение #52


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

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




\" - это Lua экранирование, так как кавычка является символом синтаксиса Lua (в отличие от символа %, который является экранирующим символом в регулярном выражении).
Захватить символ можно скобками:
Код
str:find"(\")"

можно написать так:
Код
str:find'(")'


То есть, экранировать кавычки нужно в том случае, когда эти же кавычки обозначают строку.


Спасибо сказали:
Go to the top of the page
+Quote Post
GULAM33
сообщение 22.10.2012, 10:34
Сообщение #53


Участник
**

Группа: Пользователи
Сообщений: 41
Регистрация: 9.10.2011
Из: Владимирская обл.
Пользователь №: 9 819
Спасибо сказали: 3 раза




Огромное спасибо Setuperу, помогли разобраться .
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 12.8.2014, 22:17
Сообщение #54


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




Что за %с – контрольный символ? Пожалуйста, приведите пример.
Go to the top of the page
+Quote Post
Ksan
сообщение 13.8.2014, 0:39
Сообщение #55


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




MIKHAIL,
Подозреваю, это непечатаемые символы с цифровым кодом до 32 (от 0 до 31).
Как пример - \r, \n, \t Надеюсь, они вам знакомы? big_smile.gif
Вот полный перечень этих символов:
%c: \0 \1 \2 \3 \4 \5 \6 \a \b \t \n \v \f \r \14 \15 \16 \17 \18 \19 \20 \21 \22 \23 \24 \25 \26 \27 \28 \29 \30 \31
Возможно, есть ещё один символ.
Где-то на форуме было описание каждого из них.


Спасибо сказали:
Go to the top of the page
+Quote Post
Alexey
сообщение 13.8.2014, 1:27
Сообщение #56


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Неправильный перевод. Это управляющие символы.
Для ответов на подобные вопросы даже скрипт выложили.


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

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

Collapse

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

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Несколько вопросов по консольной птоке
5 Rom1 8 112 26.3.2012, 16:15 Посл. сообщение: Rom1
No New Posts Несколько вопросов по Основных анстройках.
3 TranceFM 7 658 16.12.2010, 11:40 Посл. сообщение: Enyby
No new Topic has attachmentsНесколько актуальных вопросов
24 averon.nv 23 158 9.8.2010, 14:36 Посл. сообщение: averon.nv
No New Posts Topic has attachmentsСкрипт тестирования множеств в регулярных выражениях
7 alex82 13 691 3.5.2010, 21:03 Посл. сообщение: Ksan
No new Запуск одновременно несколько PtokaX на одном сервере.
19 Александр 21 264 10.4.2010, 22:55 Посл. сообщение: Александр
No New Posts Переводчик Слов
Англо-Русский и на оборот)
4 (Steep)_(Boss) 7 574 30.3.2010, 16:23 Посл. сообщение: (Steep)_(Boss)
No New Posts От: Несколько скриптов
От темы с ID: 2444
0 Setuper 5 245 14.9.2009, 11:04 Посл. сообщение: Setuper
Closed Topic has attachmentsНужно перевести несколько скриптов
Хелп ...
0 Maximum 5 586 31.5.2009, 17:34 Посл. сообщение: Maximum
No New Posts Несколько Разработок Для Ptokax 0.3.6.0
API1
2 district 8 152 22.3.2009, 9:56 Посл. сообщение: Артём
Moved Несколько Разработок Для Ptokax 0.3.6.0
API1
0 district 0 14.3.2009, 12:15 Посл. сообщение: Setuper
No New Posts Хаб На Несколько Сетей
Как клиентам соединяться между собой?
3 Derk_B_P 8 250 28.2.2009, 8:34 Посл. сообщение: mariner

 



RSS Сейчас: 29.3.2024, 1:14