2014-01-05 2 views
2

Буква P, за которой следует пробел или знак «-». Затем сразу следует число от 1 до и с 150. Разрешены только полные номера. Незначительные ноль, такие как 01 или 023, не допускаются. Затем сразу следует точка. А затем сразу следуют 6 символов от A до и с Z P в начале и последних 6 символах может быть в капитале, как в нижнем регистре.Нужно регулярное выражение для идентификатора заказа

Я делаю что-то не так с моим диапазоном от 1 до 150 ... Может ли кто-нибудь помочь мне?

Это то, что я получил

(?i)p[ -]([1-9]|[1-9][0-9]|1{0,1}[0-5][0-9])[\.][a-z]{6} 

Регулярное выражение будет найти этот тоже:

p 01.SLKDOZ 

Я не хочу, что ...

+0

Хотя ответ на Njol правильно, я бы не проверить диапазон числа с регулярное выражение. Найдите числовую часть '(\ d +)', а затем проверьте ее с помощью арифметического сравнения. – punund

+0

Да ... Я читал на нескольких форумах, что проверка диапазона номеров не хороша с регулярным выражением ... Но в этом случае его действительно нужно его регулярное выражение ... Некоторый материал для собеседования! Но спасибо за совет! x – Fosa

ответ

2

Снимите {0,1} 1 после (1 из 100): (?i)p[ -]([1-9]|[1-9][0-9]|1[0-5][0-9])\.[a-z]{6}

1{0,1} соответствует 1 ноль или один раз, и если 1 не согласован, можно сопоставить следующее 0.

+0

Thanx Bro! Я буду принимать в качестве ответа в течение нескольких минут. – Fosa

1

reg.txt

p 1.SLKDOZ 
P 150.ABCDEF 
P 151.ABCDEF 
P 150.ABCDEFG 
P 090.ABCDEF 
P 005.ABCDEF 
P 05.ABCDEF 

Perl regx

$ cat reg.txt | perl -nle "chomp($_); print if (/^[pP][- ]([1-9]|[1-9][0-9]|1[0-4][0-9]|150)\.[a-zA-Z]{6}$/g);" 

Выход:

p 1.SLKDOZ 
P 150.ABCDEF 
Смежные вопросы