2013-09-19 5 views
0

У меня есть другой вопрос сегодня. У меня есть устройство электронной почты, которое я настраиваю для фильтрации определенных данных, но это можно сделать только с помощью регулярного выражения. У меня это частично выполнено. thanks to this fine gentleman.. Что мне нужно сделать сейчас, это нечто более сложное. Я должен добавить, что я полный новичок в регулярном выражении. Сейчас я использую это:Регулярное выражение для целых чисел 7-12 цифр

(?<!\d)(?!1000000)([1-7]\d{6}|8000000)(?!\d) 

Чтобы найти 7 цифр целых чисел в диапазоне от 1000001 до 8000000, что я ищу, чтобы сделать теперь найти целые числа между 1000000. и 12000000000, я могу повторно цель этого кода путем простого изменения вверх по разрезу здесь

([1-7]\d{6} 

но из моего понимания, поскольку это потребовало бы отформатировать 5 отдельных выражений, чтобы найти нужные мне данные (я может быть полностью покинуть базу по этому поводу, но я не знаю достаточно о не знаю regex, чтобы изменить эту строку на то, что мне нужно). Я бы предпочел, чтобы одно выражение искало данные между 7-12 цифрами и остановилось при определенном явном 12-значном значении. Как я могу это сделать?

+0

Когда вы говорите "между 1000000. и 12000000000" вы имели в виду включить конечные точки? –

+0

Все, что я хочу сделать, начинается с 1000000 или 1000001 и заканчивается на 12000000000, если 1000000 совпадений и/или если соответствует 12000000000, это не имеет значения, поскольку дополнительные совпадения не собираются сбросить то, что я do – user2796751

+0

Тогда вы можете отказаться от этого первоначального негативного взгляда в своем принятом ответе. –

ответ

0

С пылью расположившись, вот что я считаю, это самый простой «приемлемый» диапазон в вопросе, с @ HVd-х предостережений об использовании \d:

\b([1-9]\d{6,9}|1[01]\d{9})\b 

Это включает в себя 1000000. и исключает 12000000000 ради простоты.

+0

Это позволяет «00000000», не так ли? – hvd

+0

Да. Исправит это. –

+0

Мы оба неправильно читаем вопрос таким же образом :) – hvd

0

я мог бы быть недопонимание ваш вопрос, но это не так просто

^[1-9][0-9]{6,11}$ 
+0

Что включает цифры больше 1,2 * 10 ** 9 –

+0

Я думаю, что число в вопросе было 1.2E10. – Brian

+0

Что бы это ни было ;-) ваше регулярное выражение все еще позволяет первой цифре 2 или более, что означает, что она не «останавливается» на 120000 ... –

1

1000000 на 12000000000 (эксклюзив) может быть почти:

+1000000 9999999: [1-9][0-9]{6}

10000000 до 99999999 : [1-9][0-9]{7}

100000000 до 999999999: [1-9][0-9]{8}

1000000000 до 9999999999: [1-9][0-9]{9}

10000000000 11999999999 к: 1[01][0-9]{9}

Некоторые варианты регулярных выражений синтаксис позволяет a{m,n} получить a где-нибудь от m до n раз, позволяя первые четыре из них должны быть объединены в один. Полное регулярное выражение для полного матча будет выглядеть

[1-9][0-9]{6,9}|1[01][0-9]{9}

, которые затем можно обернуть в (?<![0-9])(...)(?![0-9]), чтобы искать части строк.

Это также соответствует 1000000, поэтому, чтобы исключить это, вы можете использовать ту же самую конструкцию (?!...), которая у вас уже есть, за исключением изменения, которое разрешено до 1000000, за которым следуют другие цифры.

(?<![0-9])((?!1000000(?![0-9]))[1-9][0-9]{6,9}|1[01][0-9]{9})(?![0-9])

Кстати, я использую [0-9] вместо \d, потому что я не знаю, какой REGEX диалект вы используете. \d также соответствует другим цифрам, чем нашна некоторых диалектах.

+0

Шляпа от вас. Я сейчас удалю его. Я чему-то научился, и у вас это хорошо в руках! :-) –

+0

Не могли бы вы просто добавить это '$' в конец '(?! 1000000 $)'? –

+0

Это сработает, но я предпочитаю модифицировать свое первоначальное заявление. Я пробовал этот подход, но он работает отлично. – user2796751

Смежные вопросы