|
Wildcards (? и *) matching algorithm
26.07.2008 13:02
|
|
|
которые типа любой символ заменяют и любое кол-во символов соотв.?
Редактировал turbozapekanka (27.07.2008 20:47)
|
|
BorisL
|
постоянный отец
|
|
|
|
Рег.: 23.02.2004
|
Сообщений: 17631
|
Из: torrent.msu
|
Рейтинг: 3560
|
|
|
|
|
Re: как называются ? и *
[re: BorisL]
26.07.2008 13:07
|
|
|
точняк! а теперь нужен алгоритм для их matching )
|
|
|
|
либо функция, чтоб wildcard в regexp pattern переделать, а regexp matching у меня уже есть )
|
|
BorisL
|
постоянный отец
|
|
|
|
Рег.: 23.02.2004
|
Сообщений: 17631
|
Из: torrent.msu
|
Рейтинг: 3560
|
|
|
В ответ на:
wildcard в regexp pattern
жесть
code: * -> .*
? -> .
|
|
|
Re: как называются ? и *
[re: BorisL]
26.07.2008 13:19
|
|
|
а точку надо преобразовывать? и другие говно-символы?
|
|
Bachan
|
god's pee
|
|
|
|
Рег.: 26.10.2002
|
Сообщений: 37551
|
|
Рейтинг: 5335
|
|
|
code: . -> \.
|
я АЭС фачил в эсс! |
|
BorisL
|
постоянный отец
|
|
|
|
Рег.: 23.02.2004
|
Сообщений: 17631
|
Из: torrent.msu
|
Рейтинг: 3560
|
|
Re: как называются ? и *
[re: Bachan]
26.07.2008 13:30
|
|
|
code: говно-символ -> \говно-символ
забыл
|
|
Basilio
|
GreenOne
|
|
|
|
Рег.: 14.10.2002
|
Сообщений: 13749
|
Из: Москва
|
Рейтинг: 3476
|
|
Re: как называются ? и *
[re: BorisL]
27.07.2008 18:44
|
|
|
список говно-символов прилагается? \, / - вроде такие..
$ - такой? & - такой? <>, [], -?
|
|
BorisL
|
постоянный отец
|
|
|
|
Рег.: 23.02.2004
|
Сообщений: 17631
|
Из: torrent.msu
|
Рейтинг: 3560
|
|
Re: как называются ? и *
[re: Basilio]
27.07.2008 18:50
|
|
|
В ответ на:
список говно-символов прилагается?
первая сцылка в гугле:
В ответ на:
Because we want to do more than simply search for literal pieces of text, we need to reserve certain characters for special use. In the regex flavors discussed in this tutorial, there are 11 characters with special meanings: the opening square bracket [, the backslash \, the caret ^, the dollar sign $, the period or dot ., the vertical bar or pipe symbol |, the question mark ?, the asterisk or star *, the plus sign +, the opening round bracket ( and the closing round bracket ). These special characters are often called "metacharacters".
|
|
Sharp
|
wayfarer
|
|
|
|
Рег.: 02.12.2004
|
Сообщений: 1021
|
|
Рейтинг: 21
|
|
|
Вариант без регекспов
code: bool PatternMatch(const char *s, const char *mask)
{
const char *cp = 0;
const char *mp = 0;
// Съедаем маску и строку до первой *, либо до конца
for (; *s && *mask != '*'; mask++, s++) if (*mask != *s && *mask != '?') return 0;
for (;;) {
// Если строка кончилась, то остаток маски должен состоять только из *
if (!*s) { while (*mask == '*') mask++; return !*mask; }
// Если маска начинается с *, съедим * и:
// - если она ей и кончается, то return true
// - иначе запомним, с какой маски и строки начинать, если, исходя из предположения,
// что * совпадает с пустой строкой, мы встретим облом
if (*mask == '*') { if (!*++mask) return 1; mp = mask; cp = s + 1; continue; }
// Съедаем символ в маске и строке, если в маске тот же символ или ?
if (*mask == *s || *mask == '?') { mask++, s++; continue; }
// Символы в маске и строке не совпадают!
// - в случае неудачи в дальнейшем сопоставлении возьмем ту же маску и на 1 короче суффикс
mask = mp; s = cp++;
}
}
|
|
|
Re: как называются ? и *
[re: Sharp]
27.07.2008 20:41
|
|
|
сам придумал? тестировал его? или скажи откуда взял
Редактировал turbozapekanka (27.07.2008 21:00)
|
|
Fj_
|
Carpal Tunnel
|
|
|
|
Рег.: 12.09.2004
|
Сообщений: 8795
|
|
Рейтинг: 3287
|
|
Re: как называются ? и *
[re: Sharp]
27.07.2008 22:04
|
|
|
Только в отличие от регексов он у тебя бэктрекается. Поэтому миллион букв "а" он будет сличать с паттерном "*b" несколько часов. А с паттерном "*a*b" - несколько лет. А с паттерном "*a*a*b" - несколько миллионов лет. Это плохо!
|
The data is the error (c)IIS FTP Server. |
|