Проверьте, содержит ли строка 10-значный номер, но пробел после каждой цифры с помощью php - PullRequest
0 голосов
/ 27 сентября 2018

Предположим,

$str = "hi hello 1 2 3 4 5 6 7 8 9 0 ok"

, поэтому совпадение найдено.Я пытался с регулярным выражением, как

preg_match_all('/[0-9 ]{20}/', $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

, но это также соответствует другим

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Попробуйте!

Регулярное выражение:

(?:[0-9][ ]){10}

Проверьте с помощью регулярного выражения 101:

enter image description here

0 голосов
/ 27 сентября 2018

ваше регулярное выражение совпадает с пробелом перед первым числом, в этом проблема

[0-9 ]{20}

Чтобы исправить его, начиная с [0-9], вы вводите первое совпадение как число и корректируете пробел, а затемчисло ([ ][0-9]) 9 раз.

[0-9](?:[ ][0-9]){9}

демо

0 голосов
/ 27 сентября 2018

Попробуйте использовать следующий шаблон:

\b[0-9](?: [0-9]){9}\b

Ваш обновленный код:

$str = "hi hello 1 2 3 4 5 6 7 8 9 0 ok";
preg_match_all('/\b[0-9](?: [0-9]){9}\b/', $str, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[0][0]);

Array ( [0] => 1 2 3 4 5 6 7 8 9 0 [1] => 9 )

Причина размещения границ слова (\b) по обеим сторонам шаблона:чтобы предотвратить ложное совпадение по линии следующего

10 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 012

То есть нам нужно убедиться, что первая и последняя цифры на самом деле представляют собой отдельные цифры, а не части больших чисел.

...