Любая числовая строка, кроме строки, содержащей '000' - PullRequest
1 голос
/ 22 апреля 2019

Как сопоставить все числа, кроме 000.То есть,

001234567502344001233400122300 is fine.
0123456750023440012334012230 is fine.
000123456750234400123340012230 is not fine.
001234567502344000123340012230 is not fine.
0012345675023440012334001223000 is not fine.
00123456750234400012334001223000 is not fine.
001002003004005006 is fine.
001 id fine
10 is fine.
01 is fine.
000 is not fine.

Должен ли я использовать отрицательные Lookaheads или следующую технику:

/(()|()|())/g

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Вы можете использовать

^(?!\d*000)\d+$

См. Демонстрационный пример regex и график Regulex :

enter image description here

Подробности

  • ^ - начало строки
  • (?!\d*000) - сразу после начала строки, не может бытьлюбые цифры 0+, за которыми следует 000 подстрока
  • \d+ - 1+ цифры
  • $ - конец строки.
1 голос
/ 22 апреля 2019

Вы хотите

$string !~ /000/

Тест:

$ perl -nle'printf "%s is %s\n", $_, !/000/ ? "fine" : "not fine"' <<'.'
001234567502344001233400122300
0123456750023440012334012230
000123456750234400123340012230
001234567502344000123340012230
0012345675023440012334001223000
00123456750234400012334001223000
001002003004005006
001
10
01
000
.
001234567502344001233400122300 is fine
0123456750023440012334012230 is fine
000123456750234400123340012230 is not fine
001234567502344000123340012230 is not fine
0012345675023440012334001223000 is not fine
00123456750234400012334001223000 is not fine
001002003004005006 is fine
001 is fine
10 is fine
01 is fine
000 is not fine

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

(?:(?!000).)*

Например,

/^(?:(?!000).)*\z/

Например,

my @safe_numbers = $string_with_multiple_numbers =~ /\b(?:(?!000)\d)*\b/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...