Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Частичное совпадение с регуляркой.   Найти похожие ветки 

 
Дмитрий С ©   (2012-05-05 09:19) [0]

Как сделать?
Например есть регулярка:
~^(9\d\d)(\d\d\d)(\d\d)(\d\d)$~
Как можно проверить, что какая либо строка частично соответствует этой регулярке. Частично в данном случае означает, что с начала строки. Например
"914123" - частично соответствует
"014123" - не соответствует частично

Или например такая регулярка:
~^(\d+)/NIC-(A|D|REG)$~

Есть идеи?


 
БарЛог ©   (2012-05-05 09:32) [1]

Свои регулярки написать


 
Медвежонок Пятачок ©   (2012-05-05 09:35) [2]

что значит частично соответствует?

начинается с девятки и имеет после себя несколько цифровых символов?

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


 
Дмитрий С ©   (2012-05-05 09:43) [3]


> Медвежонок Пятачок ©   (05.05.12 09:35) [2]

Частично, это значит, что строка соответствовала маске, пока не наступил конец этой строки. Т.е. сравнение прервано не из-за того, что строка с какого то символа перестала соответствовать маске, а потому что строка кончилась.


 
Медвежонок Пятачок ©   (2012-05-05 09:46) [4]

ну так ^9\d*


 
БарЛог ©   (2012-05-05 10:20) [5]

> а потому что строка кончилась.

Ну так, может, кусочек следующей тоже проверять?


 
han_malign   (2012-05-05 14:56) [6]

В PCRE есть такие опции...
В TRegExpr можно попробовать (SubExprMatchCount >= 0) and (Match[0] = InputStr)


 
xayam ©   (2012-05-05 23:48) [7]


> ну так ^9\d*

скорей так: ~^9\d{0,9}$~

у него звёздочка не подходит поскольку кол-во цифр известно


 
xayam ©   (2012-05-06 08:59) [8]


> Или например такая регулярка:
> ~^(\d+)/NIC-(A|D|REG)$~
> Есть идеи?

страница 131 в книге http://rutracker.org/forum/viewtopic.php?t=3828631

Условия в ссылках назад.

Но не везде реализовано по-моему...


 
Андреевич   (2012-05-06 12:46) [9]

в pcre они есть, в posix нету


 
xayam ©   (2012-05-06 13:22) [10]

хотя вообще вопрос в другом: с какой целью интересуетесь?


> ~^(9\d\d)(\d\d\d)(\d\d)(\d\d)$~

это явно телефон

> ~^(\d+)/NIC-(A|D|REG)$~

это явно логин (он же номер договора) для входа в руцентр...

Зачем эти вещи могли понадобиться? :)


 
Местный шалун   (2012-05-06 17:19) [11]


>  xayam ©   (06.05.12 13:22) [10]


> Зачем эти вещи могли понадобиться? :)


Жжошь. Браво! :)


 
Дмитрий С ©   (2012-05-07 09:45) [12]


> в pcre они есть, в posix нету

А точнее? Я в PHP весь мануал перечитал - ничего такого не нашел. Там вроде тоже PCRE.

Пока я такое решение нашел:
1. Выбираем символ, который не содержится в строке, например %.
2. Делаем замену в регулярке:
   - В квадратные скобки добавляем %, например [a-z] на [a-z%];
   - Добавляем % к каждому символу, например, \d на [\d%], R на [R%];
   - Заменяем [^...] на (?:[^...]|%)
   - ...
3. Стираем $ в конце регулярки;
4. Добавляем к проверяемой строке несколько символов % (например, 200).
4. Проверяем обычной функцией preg_match.

Вот примеры:
~^([9%][\d%][\d%])([\d%][\d%][\d%])([\d%][\d%])([\d%][\d%])~
~^([\d%]+)[/%][N%][I%][C%][-%]([A%]|[D%]|[R%][E%][G%])~


 
xayam ©   (2012-05-07 12:18) [13]


> Выбираем символ, который не содержится в строке, например %
> ~^([9%][\d%][\d%])([\d%][\d%][\d%])([\d%][\d%])([\d%][\d%])~

а смысл? если % всё равно нет...


 
antonn ©   (2012-05-07 16:35) [14]


> Дмитрий С ©   (07.05.12 09:45) [12]

я чет не понял что нужно сделать.
1 Нужно проверить две подстроки готовой регуляркой?
2 Нужно составить регулярку чтобы проверить две неизвестных подстроки на "похожесть"?


 
Дмитрий С ©   (2012-05-07 16:41) [15]


> antonn ©   (07.05.12 16:35) [14]

Вообще задача проверять соответствие регулярке при вводе. Ввод при этом осуществляется только добавлением или удалением символов справа.


> а смысл? если % всё равно нет...


> 4. Добавляем к проверяемой строке несколько символов % (например,
>  200).


 
antonn ©   (2012-05-07 16:52) [16]


> Вообще задача проверять соответствие регулярке при вводе.
>  Ввод при этом осуществляется только добавлением или удалением
> символов справа.

При вводе подстроки? ну тогда для дельфи есть RegExpr.pas, но он не поддерживает фишки вроде "поиска вперед" (это конструкции типа ?! и ?:). Если задача проверить любую регулярку, то нужно искать компонент ее реализующий.


 
antonn ©   (2012-05-07 16:58) [17]

ну и в догонку, при изменении подстроки (не важно откуда и куда) вызывать is_match (в php она preg_match()) и смотреть возвращаемый результат


 
Дмитрий С ©   (2012-05-08 22:40) [18]


> ну и в догонку, при изменении подстроки (не важно откуда
> и куда) вызывать is_match (в php она preg_match()) и смотреть
> возвращаемый результат

Так не пойдет. Например, тот же логин руцентра:
~^(\d+)/NIC-(A|D|REG)$~
Пользователь ввел: "1234/N" - и как узнать, может это являться началом логина или пользователь уже ошибся? В моей задаче важно это знать уже на этом этапе.
А еще путем перебора очередной буквы можно будет установить, что, например, после ввода символа "/" можно спокойно приписать "NIC-", т.к. других вариантов быть не может.
Эта проблема решена в DevExpress-е вроде. Т.к. там можно указывать RegExpr маски для Edit-ов. Но насколько я понмю, там полностью своя реализация этих самых регулярок.
Я немного поторопился, когда говорил про PHP. Конечно это будет регулярки JavaScript-а, потому что "морда" у меня веб-овская.


 
antonn ©   (2012-05-09 00:26) [19]


> Пользователь ввел: "1234/N" - и как узнать, может это являться
> началом логина или пользователь уже ошибся? В моей задаче
> важно это знать уже на этом этапе.

взять и проверить эту подстроку регуляркой. Если регулярка "прошла" - значит регулярка "подходит" к этой подстроке, со всеми вытекающими. Или нужно "бибикнуть" если после ввода N он введет цифру? Юзерфрендли получше, но костылей тут будет немеряно


 
был здесь   (2012-05-09 08:12) [20]


> других вариантов быть не может

можно список выпадающий сделать с тремя вариантами для
выбора: NIC-A, NIC-D, NIC-REG
а цифры пусть уж вводит


 
Андреевич   (2012-05-09 10:59) [21]

я так понял, что у него разные регулярки, отсюда не предугадаешь с такими списками



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.049 c
11-1244182809
QAZ
2009-06-05 10:20
2013.03.22
HeapMM vs FastMM


2-1343403948
VitalijZ
2012-07-27 19:45
2013.03.22
TWebbrowser


15-1353423286
0xDEADBEEF
2012-11-20 18:54
2013.03.22
неадекватно отображаются компоненты в Windows7


15-1332713589
-111-
2012-03-26 02:13
2013.03.22
office starter 2010


11-1245312300
QAZ
2009-06-18 12:05
2013.03.22
Applet