Несколько Слов О Захватах И Регулярных Выражениях, исключительно для разработчиков |
Здравствуйте, гость ( Вход | Регистрация )
Несколько Слов О Захватах И Регулярных Выражениях, исключительно для разработчиков |
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(".-/", "") |
|
|
4.3.2012, 12:23
Сообщение
#42
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Ksan, наверное, имел в виду:
Код local sFileName = sFilePath:gsub(".*/", "")
|
|
|
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, во втором варианте получим всю строку. Какой вариант лучше - решать самому скриптописателю. |
|
|
4.3.2012, 21:21
Сообщение
#44
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
Setuper, я имел в виду именно то, что написал.
Перед написанием сюда я проверил у себя. Но если настаиваешь на "*" вместо "-", то было бы проще сразу написать, почему (именно для данного случая), потому что правильный ответ выдаёт и так и иначе. При любых видоизменениях исходного текста пути. |
|
|
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 Как исправить эту ситуацию, какое регулярное выражение необходимо применить? |
|
|
5.10.2012, 9:23
Сообщение
#46
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код "%sXYZ$" Если скрипт для PtokaX, то предварительно нужно удалить символ | с конца строки, или же писать так: Код "%sXYZ|$"
|
|
|
5.10.2012, 16:20
Сообщение
#47
|
|
Участник Группа: Пользователи Сообщений: 41 Регистрация: 9.10.2011 Из: Владимирская обл. Пользователь №: 9 819 Спасибо сказали: 3 раза |
Спасибо, я подозревал о наличии "невидимого пробела" .
|
|
|
10.10.2012, 1:15
Сообщение
#48
|
|
Участник Группа: Пользователи Сообщений: 41 Регистрация: 9.10.2011 Из: Владимирская обл. Пользователь №: 9 819 Спасибо сказали: 3 раза |
Выяснил следующее. Одного вида захвата будет не достаточно.
Так как захват "%sСЛОВО|$" будет работать в случае, если после СЛОВА не будет пробела. А так выводит в чат Поэтому необходимо СЛОВО захватить двумя разными захватами чтобы запрещённые слова не выводились в чат: "%sСЛОВО|$" и "%sСЛОВО%s". |
|
|
13.10.2012, 2:06
Сообщение
#49
|
|
Участник Группа: Пользователи Сообщений: 41 Регистрация: 9.10.2011 Из: Владимирская обл. Пользователь №: 9 819 Спасибо сказали: 3 раза |
Данный символ " является инструментом для захвата. Является ли символ магическим. Как экранировать данный символ? Пример экранирования любого магического символа мне не помог. (%.) и (%") .
|
|
|
13.10.2012, 2:21
Сообщение
#50
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Цитата Как экранировать данный символ? Код string = "\"Hello world\"" Тоже самое будет и для одинарных ковычек. |
|
|
14.10.2012, 1:12
Сообщение
#51
|
|
Участник Группа: Пользователи Сообщений: 41 Регистрация: 9.10.2011 Из: Владимирская обл. Пользователь №: 9 819 Спасибо сказали: 3 раза |
А захват данного символа как осуществить?
|
|
|
15.10.2012, 9:06
Сообщение
#52
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
\" - это Lua экранирование, так как кавычка является символом синтаксиса Lua (в отличие от символа %, который является экранирующим символом в регулярном выражении).
Захватить символ можно скобками: Код str:find"(\")" можно написать так: Код str:find'(")' То есть, экранировать кавычки нужно в том случае, когда эти же кавычки обозначают строку. |
|
|
22.10.2012, 10:34
Сообщение
#53
|
|
Участник Группа: Пользователи Сообщений: 41 Регистрация: 9.10.2011 Из: Владимирская обл. Пользователь №: 9 819 Спасибо сказали: 3 раза |
Огромное спасибо Setuperу, помогли разобраться .
|
|
|
12.8.2014, 22:17
Сообщение
#54
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Что за %с – контрольный символ? Пожалуйста, приведите пример.
|
|
|
13.8.2014, 0:39
Сообщение
#55
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL,
Подозреваю, это непечатаемые символы с цифровым кодом до 32 (от 0 до 31). Как пример - \r, \n, \t Надеюсь, они вам знакомы? Вот полный перечень этих символов: %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 Возможно, есть ещё один символ. Где-то на форуме было описание каждого из них. |
|
|
13.8.2014, 1:27
Сообщение
#56
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
|
|
|
Похожие темы
|
Сейчас: 26.11.2024, 21:01 |