Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизЧастичное совпадение с регуляркой. Найти похожие ветки
← →
Дмитрий С © (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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.055 c