Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] regEXP | Вопрос по написанию. (http://forum.oszone.net/showthread.php?t=209553)

pingUIN 21-06-2011 14:59 1698898

regEXP | Вопрос по написанию.
 
День добрый, нужна помощь по сабжу.

Код:

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

Код:

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



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

Спасибо.

Busla 21-06-2011 16:23 1698974

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

pva 21-06-2011 18:28 1699050

реализации могут различаться в деталях. Вот у 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 1699470

Цитата:

Цитата pva
79, точка и 8 чисел от 0 до 2 запишется как 79\.[0-2]{8} »

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

Код:

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

amel27 22-06-2011 17:27 1699713

Цитата:

Цитата pingUIN
в данном случае как я понимаю охвачено 60% диапазона по номерной емкости, как можно было бы написать регулярку, чтобы охват по диапазону был всего 15%? »

что есть "номерная ёмкость"?.. числовая ёмкость такого выражения (6/10)^8 ~ 1,68%

pva 24-06-2011 18:21 1700981

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

pingUIN 27-06-2011 11:13 1702216

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

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

pva 27-06-2011 22:21 1702585

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

pingUIN 30-06-2011 10:44 1704131

Цитата:

Цитата pva
причём первая часть составит ровно 15% от всевозможных комбинаций. Совсем не обязательно фиксировать первые цифры. Можно любые, например 3(единицы) и 1(десятки) с конца. »

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

>_<

pva 30-06-2011 20:25 1704629

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

pingUIN 14-12-2011 15:35 1815127

Код:


||                                {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% (по предпоследней цифре)

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


Время: 14:36.

Время: 14:36.
© OSzone.net 2001-