myDC.ru

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

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

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

Sekretchik
сообщение 7.1.2011, 2:20
Сообщение #21


Продвинутый участник
****

Группа: Пользователи
Сообщений: 104
Регистрация: 1.4.2009
Из: Россия
Пользователь №: 2 871
Спасибо сказали: 42 раза




Спасибо Вам Илья. Я учусь и набираю опыт с вашей помощью.
Но у меня вопрос. в переменную sDesc записывается [Описание][Тэг]. Я хотел бы разделить их на две разные переменные. Это возможно?
Go to the top of the page
+Quote Post
Setuper
сообщение 7.1.2011, 12:21
Сообщение #22


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

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




Код
local sDescription, sTag = sDesc:match'^(.*)(<.*>)$'
if not sDescription then
  sDescription = sDesc
  sTag = ''
end


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


Продвинутый участник
****

Группа: Пользователи
Сообщений: 153
Регистрация: 21.9.2008
Из: Челябинск
Пользователь №: 574
Спасибо сказали: 54 раза




ещё бы описание того что делают в регулярных выражениях квадратные скобки...
Насколько я понимаю в них указываются варианты символов, которые могут быть в этом месте строки, а как быть если эти варианты состоят не из одного символа?
Аналогично и для "всяких плюсиков" т.е. возможно ли использовать их относительно группы символов и если да, то как её обозначить?
Go to the top of the page
+Quote Post
Setuper
сообщение 9.1.2011, 13:58
Сообщение #24


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

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




Квадратные скобки обозначают так называемые символьные класса. Это означает, что на данном месте может стоять любой из символом, который указан в символьном классе.
В символьном классе возможно задать диапазоны символов: [А-Яа-я]. Так выглядит диапазон всех русских букв за исключением Ё и ё.
Что касается плюсика, то к символьному классу можно его применять.

Код
local s="baaabbbababbbaaaaab bababbbababbabbabbab"
print(s:match"([ab]+)") -- Результат: baaabbbababbbaaaaab


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 9.1.2011, 15:45
Сообщение #25


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Цитата(Serx @ 9.1.2011, 3:12) *
а как быть если эти варианты состоят не из одного символа?

В луа, к сожалению, в регулярках подобного нету, так что приходится делать несколько выражений.


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 9.1.2011, 16:41
Сообщение #26


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

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




Цитата
а как быть если эти варианты состоят не из одного символа?
Serx, пример приведи..
Go to the top of the page
+Quote Post
Serx
сообщение 9.1.2011, 17:48
Сообщение #27


Продвинутый участник
****

Группа: Пользователи
Сообщений: 153
Регистрация: 21.9.2008
Из: Челябинск
Пользователь №: 574
Спасибо сказали: 54 раза




Nickolya уже ответил, то что я и думал (как бы мне этого и не хотелось) big_smile.gif

Ksan: я просто сейчас составляю выражения для антимата (не захотел брать готовый "набор выражений", чтобы самому получше разобраться) и вот сейчас чтобы без мата пишу пример который первый пришел в голову:
допустим хочется перехватить "ложку" и "ложечку" не затрагивая слова "ложе"
у меня были мысли чтобы записать выражение вроде
Код
ло[(ж)(жеч)]ка

как я понял такое в LUA одним выражением не осуществить)
Go to the top of the page
+Quote Post
Ksan
сообщение 9.1.2011, 18:00
Сообщение #28


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

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




1. Может, поможет это:
Код
"лож[е]?[ч]?ка"

Вряд ли напишут "ложчка" или "ложека"
Ну я проверил, работает (а как же иначе?)
Вот результат в чате:
Цитата
[21:06:07] ложка
[21:06:12] ложечка
[21:06:15] <Test> ложе

2. Ну либо "ложе" вводи в исключения. А насчёт "ложчка" - лично у себя я опечатки и орфографические ошибки не ввожу в исключения, пусть учатся грамотно писать. big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 9.1.2011, 18:11
Сообщение #29


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

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




Дело в том, что в регулярке lua, в отличие от перловской регулярки, нету знака "или", который обозначается в перле пайпом - "|".

Что касается указанного примера:
Код
"лож[е]?[ч]?ка"
то тут можно обойтись и без символьных классов:
Код
"ложе?ч?ка"


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 9.1.2011, 18:16
Сообщение #30


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

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




Не подумал.
Но по большому счёту там могли быть и 2 и больше символов, просто это пример такой простой. big_smile.gif
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.12.2011, 1:03
Сообщение #31


KEEP CLEAR AT ALL TIMES
****

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




Подскажите, пожалуйста, как организовать захват всего http://pogoda.by/rss2/cityrss.php?q=26850, что удовлетворяет условию:
Код
..:match("<pubDate>(.-)</pubDate>")

При таком шаблоне у меня, естественно, только одно совпадение и, соответственно, один захват. Что надо дописать в шаблон, чтобы происходил захват всех таких совпадений? Логика подсказывает, что нужен плюс "+", только вот куда его вставить?
Go to the top of the page
+Quote Post
Ksan
сообщение 8.12.2011, 2:51
Сообщение #32


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

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




Попробуй внедрить в свой скрипт эту процедуру (названия переменных можешь изменить как тебе понравится):
Код
t = {}
for k, v in sMsg:gmatch("<pubDate>.-</pubDate>") do
    local s = v:match("<pubDate>(.-)</pubDate>")
    t[k] = s
end

При выполнении все строки, содержащее нужную тебе информацию (в данном случае время/дату) сохранятся в таблицу t
Потом сможешь вытаскивать их когда и как тебе угодно, например, так:
Код
local sTime = t[1]

дальше это вставляешь в своё выводимое сообщение в нужное место.


Спасибо сказали:
Go to the top of the page
+Quote Post
Alexey
сообщение 8.12.2011, 2:54
Сообщение #33


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

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




Используй конструкцию типа:
Код
for v in sData:gmatch"<pubDate>(.*)</pubDate>" do
...
end

Внутри этого цикла переменной v будет поочерёдно присвоено значение из всех захватов по маске.

PS: Страницу с погодой я не смотрел и потому правильность маски не гарантирую.
PPS: Ну Ksan!!! Опередил... :P

Сообщение отредактировал Alexey - 8.12.2011, 3:03


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


Абсолютный новичок


Группа: Пользователи
Сообщений: 1
Регистрация: 23.1.2012
Пользователь №: 10 211
Спасибо сказали: 0 раз




Здавствуйте) Подскажите а какой символ в регулярных выражения lua используется для отступов(табуляции)??? в каждой строке есть несколько отступов, нужно найти содержимое между ними, ниче не могу придумать(((
Go to the top of the page
+Quote Post
Артём
сообщение 23.1.2012, 11:50
Сообщение #35


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Xomut
Код
%s - \t \n \v \f \r <space>
Go to the top of the page
+Quote Post
Setuper
сообщение 23.1.2012, 16:42
Сообщение #36


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

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




можно заюзать "\t+(%S*)"
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 4.3.2012, 2:08
Сообщение #37


KEEP CLEAR AT ALL TIMES
****

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




Захват с начала строки понятен. Но как организовать захват с конца строки до ближайшего символа "/" влево в случае, если строка по длине непостоянна и количество директорий может меняться. Например, захватить имя файла (может меняться) с расширением (может меняться) – "sFileName.sExt":
Код
http://sHostName/sDir1/sDir2/.../sDirN/sFileName.sExt
Go to the top of the page
+Quote Post
Enyby
сообщение 4.3.2012, 2:22
Сообщение #38


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




"[^/]+$"


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


KEEP CLEAR AT ALL TIMES
****

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




Поиск/захват строки всегда идёт только слева направо, т.е. с начала строки и до конца, или есть вариант наоборот – справа налево, т.е. с конца строки и до начала без каких-либо лишних сортировок?
Go to the top of the page
+Quote Post
Enyby
сообщение 4.3.2012, 3:01
Сообщение #40


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 239 раз




Слева направо. Но тебе никто не мешает сделать реверс строки (string.reverse), а потом гонять регулярки. К найденным кусками потом снова применить реверс и будет поиск справа налево.


Спасибо сказали:
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 727 26.3.2012, 16:15 Посл. сообщение: Rom1
No New Posts Несколько вопросов по Основных анстройках.
3 TranceFM 8 067 16.12.2010, 11:40 Посл. сообщение: Enyby
No new Topic has attachmentsНесколько актуальных вопросов
24 averon.nv 24 563 9.8.2010, 14:36 Посл. сообщение: averon.nv
No New Posts Topic has attachmentsСкрипт тестирования множеств в регулярных выражениях
7 alex82 14 502 3.5.2010, 21:03 Посл. сообщение: Ksan
No new Запуск одновременно несколько PtokaX на одном сервере.
19 Александр 22 509 10.4.2010, 22:55 Посл. сообщение: Александр
No New Posts Переводчик Слов
Англо-Русский и на оборот)
4 (Steep)_(Boss) 8 136 30.3.2010, 16:23 Посл. сообщение: (Steep)_(Boss)
No New Posts От: Несколько скриптов
От темы с ID: 2444
0 Setuper 5 512 14.9.2009, 11:04 Посл. сообщение: Setuper
Closed Topic has attachmentsНужно перевести несколько скриптов
Хелп ...
0 Maximum 5 857 31.5.2009, 17:34 Посл. сообщение: Maximum
No New Posts Несколько Разработок Для Ptokax 0.3.6.0
API1
2 district 8 544 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 706 28.2.2009, 8:34 Посл. сообщение: mariner

 



RSS Сейчас: 26.11.2024, 22:43