регулярное выражение, чтобы найти номер определенной длины, но с любым символом, кроме числа до или после него - PullRequest
1 голос
/ 10 февраля 2012

Я пытаюсь выработать шаблон регулярного выражения для поиска в строке 12-значного числа. Номер может иметь любое количество других символов (но не цифр) впереди или позади того, который я ищу.

Пока у меня есть /([0-9]{12})/, который правильно находит 12-значные числа, однако он также будет соответствовать 13-значному числу в строке.

шаблон должен соответствовать 123456789012 в следующих строках

  • "rgergiu123456789012ergewrg"
  • "123456789012"
  • "# 123456789012"
  • "ergerg ergerwg erwgewrg \ n rgergewrgrewg regewrge 123456789012 ergwerg"

он не должен совпадать с этими строками:

  • "123456789012000"
  • "egjkrgkergr 123123456789012"

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

/\D(\d{12})\D/ (в этом случае номер будет индексом захвата 1)

Редактировать: Упс, это не работает, если число является всей строкой. Вместо этого используйте приведенный ниже

Или с отрицательным прогнозом и прогнозом: /(?<!\d)\d{12}(?!\d)/ (где число будет индексом захвата 0)


if( preg_match("/(?<!\d)\d{12}(?!\d)/", $string, $matches) ) {
    $number = $matches[0];
    # ....
}

где $string - текст, который вы тестируете

2 голосов
/ 10 февраля 2012

То, что вы хотите, это осмотры. Что-то вроде:

/(?<![0-9])[0-9]{12}(?![0-9])/

Взгляд вперед или назад соответствует, если шаблону предшествует или следует другой шаблон, без использования этого шаблона. Таким образом, этот шаблон будет соответствовать 12 цифрам, только если им не предшествуют или не следуют дополнительные цифры, без использования символов до и после чисел.

...