Официальный сайт студ.городка НГТУ
Программирование и БД » regexp 

#1  23.10.11 13:07

regexp

есть маска вида (123)[0-9]{2} - мы понимаем что общая длинна 5 - но мне надо как-то обрамить её ещё одной обёрткой - где будет написана длинна 5 потому как сканирую маски в автоматическом режиме и по маскам строю длинну поля для заполнения, т.е. мне надо что нить вида ((123)[0-9]{2})[0-9]{5}
подскажите как правильно обернуть?

Offline

#2  23.10.11 13:19

Igo
Профиль

Re: regexp

ну так в чем проблема? результат твоего выражения - это и есть то что тебе нужно - не надо ничего оборачивать. или я не понял исходную задачу - ЗАЧЕМ? ну укажешь ты длину 5 - но это и так подразумевается написанным регулярным выражением.

p.s. http://www.pcre.ru/eval - тут всегда можно в онлайне проверить работу регулярного выражения и потестить на разных данных

Offline

#3  23.10.11 13:30

Re: regexp

длинна мне нужна цифирей - чтобы поле нужного размера сгенерить
именно поэтому нужна окончательная длинна выражения - указаная безусловно в самой маске

Исправлено Vega (23.10.11 13:32)

Offline

#4  23.10.11 13:40

Re: regexp

потому как маска может меняться например вот так
((123|234)[0-9]{2})|((12)[0-9]{3})
а если она будет обёрнута в какую-то ещё маску сверху - где безусловно будет указана ифра 5 - то как бы она не менялась - я буду ориентироваться на самую верхнуюю маску - генеря поле длинной 5 - а потом уже подключая regexp после заполнения поля для проверки правильности заполнения

вроде понятно расписал

Offline

#5  23.10.11 13:41

Re: regexp

как правильно обернуть?

Offline

#6  23.10.11 13:57

Re: regexp

попробовав разные варианты пришёл к такому варианту обёртки с безусловным указанием длинны

((123)[0-9]{2})|{5}

правильно?

Исправлено Vega (23.10.11 14:13)

Offline

#7  27.10.11 07:52

Re: regexp

нет никакой необходимости прописывать длину строки именно в самой маске (ибо это избыточная информация), это можно сделать разными способами.

1. составить двумерный массив в котором каждому выражению будет сопоставленна длина, которую как я понял вычисляешь ты сам, а не скрипт.
2. если все-таки сам скрипт вычисляет, то пусть он это и делает. не надо ничего дописывать  в маску. Надо скриптом определить длину выражения по маске: это количество цифр в круглых скобках + число в фигурных скобках. Т.е
для (123)[0-9]{2}    length('123')+2 = 5
для (1234)[0-9]{1}    length('1234')+1 = 5
3. если масок сильно много и предполагается их изменение, то смело вноси их в БД, создав таблицу

Исправлено Podrezov (27.10.11 07:59)

Offline

#8  31.10.11 23:45

Re: regexp

Podrezov написал(а):

нет никакой необходимости прописывать длину строки именно в самой маске (ибо это избыточная информация), это можно сделать разными способами.

1. составить двумерный массив в котором каждому выражению будет сопоставленна длина, которую как я понял вычисляешь ты сам, а не скрипт.
2. если все-таки сам скрипт вычисляет, то пусть он это и делает. не надо ничего дописывать  в маску. Надо скриптом определить длину выражения по маске: это количество цифр в круглых скобках + число в фигурных скобках. Т.е
для (123)[0-9]{2}    length('123')+2 = 5
для (1234)[0-9]{1}    length('1234')+1 = 5
3. если , то смело вноси их в БД, создав таблицу

)))
я конечно не хочу быть невежой но - есть конкретная задача - и спрашивается её решение. как показала практика, найденное мною решение для моей задачи - оказалось верным. не спрашивается как подсчитать символы и т.п., т.к. "масок сильно много и предполагается их изменение". не спрашивается как внести их в базу. а спрашивается конкретный вопрос и требуется конкретный ответ - который был найден. извинияюсь за возможно не столь мягкое высказывание в твою сторону - но просто твои мемуары никакого отношения не имеют к вопросу и его решению.
"нет никакой необходимости прописывать длину строки именно в самой маске " если мой вопрос именно так поставлен - значит необходимость есть и самая что ни на есть первостепенная.

Offline

Программирование и БД » regexp 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.073 сек.
Выполнено 14 запросов.