Войти

Показать полную графическую версию : [решено] regEXP | Вопрос по написанию.


pingUIN
21-06-2011, 14:59
День добрый, нужна помощь по сабжу.

79\\d\{8\}[0-5] как я понимаю, означает следующее 79.00000000-79.55555555 где "." любая цифра, в данном случае как я понимаю охвачено 60% диапазона по номерной емкости, как можно было бы написать регулярку, чтобы охват по диапазону был всего 15%?

79\\d\{8\}[0-2] - как пример 30% охвата диапазона, но знаний для написания регулярки посложнее не хватает, может ли кто подсказать, как корректнее было бы написать выражение.



З.ы. Буду благодарен за линку на хорошее описание по регуляркам).

Спасибо.

Busla
21-06-2011, 16:23
означает это совсем другое (если это традиционное регулярное выражение):
79\d{8}цифра_от_нуля_до_пяти
\ - экранирует следующий за ним спецсимвол, т.е.
\\ означает символ \
\{ означает символ {
\} означает символ }

pva
21-06-2011, 18:28
реализации могут различаться в деталях. Вот у multi-edit совсем не такие выражения как у pcre например. Уточни, где будешь использовать. А ещё regex работает с текстом. Нельзя отсеять например, диапазон чисел. Только можно перечислить, как он пишется. 79, точка и 8 чисел от 0 до 2 запишется как 79\.[0-2]{8}
Можно почитать msdn на тему regular expression syntax или доку к pcre (http://www.pcre.org/pcre.txt, примерно с середины)

pingUIN
22-06-2011, 11:49
79, точка и 8 чисел от 0 до 2 запишется как 79\.[0-2]{8} »

Я ж вам не про это пишу, я на шаблоне понимание регулярки отобразил, как видимо ошибочно.
По сабжу, пока ничего не придумал.

79\d{8}цифра_от_нуля_до_пяти

По факту примерно такое выражение и написано, но ввиду особенности используемого ПО, приходится спец символы экранировать.

amel27
22-06-2011, 17:27
в данном случае как я понимаю охвачено 60% диапазона по номерной емкости, как можно было бы написать регулярку, чтобы охват по диапазону был всего 15%? »что есть "номерная ёмкость"?.. числовая ёмкость такого выражения (6/10)^8 ~ 1,68%

pva
24-06-2011, 18:21
тогда так:
не заданы ограничения на номера, поэтому в старших разрядах укажем число 0-14, в младших - любые числа (не экранирую)
79(0\d{7})|(1[0-4]\d{6})
получится ровно 15%

pingUIN
27-06-2011, 11:13
Собственно под номерной емкостью понимался диапазон DEF номеров Российских операторов, пример [code]79160000000-79169999999[code] почему ограничение в емкости 11 цифр.

p.s. для заметки)
при звонке с домашнего 7 у нас заменяется на 8.

pva
27-06-2011, 22:21
pingUIN, ничего не поменялось: 8916ddddddd, где d - от 0 до 9, можно разделить на 2 части:
1) 891600ddddd-891614ddddd
2) 891615ddddd-891699ddddd
причём первая часть составит ровно 15% от всевозможных комбинаций. Совсем не обязательно фиксировать первые цифры. Можно любые, например 3(единицы) и 1(десятки) с конца.
Вообще я догадываюсь что есть ещё какие-то ограничения, но пока они не заявлены, имею право издеваться

pingUIN
30-06-2011, 10:44
причём первая часть составит ровно 15% от всевозможных комбинаций. Совсем не обязательно фиксировать первые цифры. Можно любые, например 3(единицы) и 1(десятки) с конца. »

Диапазон 916 я взял для примера, если бы все было так просто, я думаю выше написанным регулярным выражением я уже бы пользовался, только прикол в том что кроме первых цифр 79 часть остального диапазона нам не известа и суть в том, чтобы понять как 15% от всех возможных емкостей отфильтровать по регэкспу.

>_<

pva
30-06-2011, 20:25
если нужно из неизвестного кол-ва случайных 7-значных чисел с неизвестной статистикой выбрать 15% от их кол-ва, то тут regex не поможет. Не для этих он целей. Тут нужен скрипт типа "отросить каждый энный элемент"

pingUIN
14-12-2011, 15:35
|| {dest-addr-regex |"79\d{7}[0-1]\d"|} || 20% (по предпоследней цифре)
{dest-addr-regex |"79\d{7}[0-2]\d"|} || 30% (по предпоследней цифре)
|| {dest-addr-regex |"79\d{7}[0-3]\d"|} || 40% (по предпоследней цифре)
|| {dest-addr-regex |"79\d{7}[0]\d"|} || 10% (по предпоследней цифре)
|| {dest-addr-regex |"79\d{6}[1-5][0]\d"|} || 5% (по предпоследним цифрам)
|| {dest-addr-regex |"79\d{7}[0-35]\d"|} || 50% (по предпоследней цифре)
|| {dest-addr-regex |"79\d{6}[0-5][5-9]\d"|} || 15% (по предпоследним цифрам)
|| {dest-addr-regex |"79\d{6}[0-8][0-3]\d"|} || 36% (по предпоследним цифрам)
|| {dest-addr-regex |"79\d{6}[0-7][0-3]\d"|} || 32% (по предпоследним цифрам)
|| {dest-addr-regex |"79\d{6}[0-1][7]\d"|} || 02% (по предпоследней цифре)


Нашел решение.




© OSzone.net 2001-2012