|
|
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Привет всем! Имеется задачка - из 6-значных чисел отобрать все "красивые". На данном этапе хотелось бы "выдрать" числа вида aba(b+1)a(b+2) - здесь каждый множитель означает разряд. Пример чисел: 121314, 515253, 929394. Поиск по мануалу не дал результата, знаю лишь, как можно указать предыдущее найденное значение. Например: /(.)(.)\\1\\2\\1\\2/ - сработает для сточки `101010`. А как бы указать в качестве шаблона нечто вида (\\1+x), где x - это смещение искомого символа относительно найденного в таблице символов? Какой максимально целесообразный способ решения данной задачки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 05:02:11 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
При данной постановке их проще не "отобрать" а "сгенерировать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 17:00:29 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Кстати, присоединюсь к топикстартеру. Было пару раз, когда требовалось в PCRE какой-то паттерн захватывать не как последовательность символов-цифр от 0 до 9, а именно как строки-числа, скажем, от 1 до 99. И приходилось или отказываться от PCRE или использовать паттерн типа [1-9]|(?:[1-9][0-9]) - чем больше был интервал, тем хуже был паттерн... а главное под каждый интервал приходилось писать свой паттерн. Чаще всего решал как (?P<name>[0-9]+), а потом проверял var[name]>=x0, var[name]<=x1, но всегда было интересно - а нет ли встроенного решения? maytonПри данной постановке их проще не "отобрать" а "сгенерировать". Всмысле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 17:18:22 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Всего 6 значных чисел - миллион. Красивых чисел - гораздо меньше. По вашему алгоритму это подпоследовательности арифметических прогресий. 101112 111213 121314 И просто повторения 101010 111111 121212 Нетрудно создать генератор этих последовательностей. Работать будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 18:24:38 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
проще сэкономить несколько часов, забыть что такое регулярное выражение и написать какую-нибудь простую оценочную функцию для числа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 19:51:17 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
mayton, а если надо проверить не число, а именно строку с числом - скажем /value=[1-500]/ - выковыривать число, проверять его отдельно, писать двухэтажный if? Это, конечно, всё можно - но как-то не по прикладному это. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 21:27:27 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
an0nymmayton, а если надо проверить не число, а именно строку с числом - скажем /value=[1-500]/ - выковыривать число, проверять его отдельно, писать двухэтажный if? Это, конечно, всё можно - но как-то не по прикладному это. :) Последовательности, которые я привёл выше генерятся без единого "if". А твой пример строки с числом я чесно говоря не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 22:10:21 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
maytonan0nymmayton, а если надо проверить не число, а именно строку с числом - скажем /value=[1-500]/ - выковыривать число, проверять его отдельно, писать двухэтажный if? Это, конечно, всё можно - но как-то не по прикладному это. :) Последовательности, которые я привёл выше генерятся без единого "if". А твой пример строки с числом я чесно говоря не понял. Напишу на известном мне языке, но думаю смысл поймешь. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 23:36:12 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Возможно тебе "нудно" писать потому-что не привык систематизировать знания. Напиши функцию Код: plaintext 1. 2. Кстати, что это за язык? Перл или Питон? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 23:55:42 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
mayton, php. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 00:34:47 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
maytonВозможно тебе "нудно" писать потому-что не привык систематизировать знания. Напиши функцию Код: plaintext 1. 2. Это всё понятно. Попробую объяснить подробнее - есть два вида задач: сгенерировать все возможные варианты чего-либо по некоторому условию (на примере ТСа условие - соответствие числа виду aba(b+1)a(b+2)) и противоположная - проверить, что некоторый вариант (или малое количество вариантов) соответствует условию. В первом случае есть что оптимизировать, ради чего искать алгоритм генерации этих чисел, а не проверять в лоб все шестизначные числа на соответствие условию, если условие сильно сужает круг подходящих шестизначных чисел. Во втором случае соответствуй условию лишь пара шестизначных чисел или большая их часть - выигрыш в производительности будет мизерный и явно меньше, чем кол-во усилий, которое потребуется потратить на математические изыскания, реализацию алгоритма... И если бы в PCRE была встроенная возможность рассматривать часть строки как числа плюс уже имеющиеся возможности бэк референса - это бы охватило практически все возможные варианты второго случая. Не скажу за системное программирование, но в прикладном программировании это было бы очень кстати. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 00:59:52 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
умрите, похапешнеги Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 04:06:48 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Да уж похоже генерить это самый целесообразный вариант... stopor Код: plaintext Кстати, попробовал сам тут еще поизвращаться, написал шаблоном с поиском по условию: автор(.)(.)(?(?<=1)(?:\\1)2|(?(?<=2)(?:\\1)3|(?(?<=3)(?:\\1)4|(?(?<=4)(?:\\1)5|(?(?<=5)(?:\\1)6|(?(?<=6)(?:\\1)7|(?(?<=7)(?:\\1)8|(?(?<=8)(?:\\1)9|x))))))))00Выдаёт сие, к примеру, на интервале (200000 , 300000) такой набор: автор[0] => 212200 [1] => 222300 [2] => 232400 [3] => 242500 [4] => 252600 [5] => 262700 [6] => 272800 [7] => 282900 Вместо 00 в конце надо добавить еще одну скобку автор(?(?<=1)(?:\\1)2|(?(?<=2)(?:\\1)3|(?(?<=3)(?:\\1)4|(?(?<=4)(?:\\1)5|(?(?<=5)(?:\\1)6|(?(?<=6)(?:\\1)7|(?(?<=7)(?:\\1)8|(?(?<=8)(?:\\1)9|(?(?<=9)(?:\\1)0|x)))))))))И тогда сможем искать нужные нам 6значные числа. Правда таким способом мы не найдём скажем число 2828930 - т.к. здесь уже есть переход на новый десяток. Да и сама рега помимо зубодробильного вида еще и дико жрёт память, использовать её не реально.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 06:03:55 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
авторПравда таким способом мы не найдём скажем число 282930 - т.к. здесь уже есть переход на новый десяток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 06:05:48 |
|
||
|
Регулярное выражение. Найти число, на 1 большее, чем предыдущее найденное
|
|||
|---|---|---|---|
|
#18+
Мне почему-то вспомнилась статья одного злобного хацкера, который писал софт для восстановления забытых паролей к WinRAR. За основу был взят генератор паролей на основе выражения похожего по синтаксису на regexp. Генератор не использовал справочники а просто перебирал все возможные варианты. К примеру если пользователь помнил что пароль состоял из 3 символов (alphanum) и одной цифры (number), то генератор перебирал все начиная от 'aaa0' до 'zzz9'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 09:20:02 |
|
||
|
|

start [/forum/search_topic.php?author=MAzamat&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 820ms |
| total: | 968ms |

| 0 / 0 |
