Как использовать регулярные выражения в PHP, чтобы найти число, окруженное пробелами? - PullRequest
0 голосов
/ 18 октября 2019

С помощью regex / PHP я пытаюсь извлечь число из укуса, но только если у номера есть пробел перед ним и еще один после него.

Сейчас у меня есть это:

$tacNO = number_format(intval(preg_replace('/[^0-9.]/','',$row[tactical])));

Он работает, чтобы получить число, но мне нужно настроить regedit для проверки включенных пробелов и вернуть только номер. Можно ли это сделать, используя lookbehind и lookahead? Что бы достичь этого?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Вы можете использовать обходные пути следующим образом:

$num = preg_match("/(?<=\s)\d+(?=\s)/", $row[tactical], $matches);
$tacNO = number_format(intval($matches[0]));

Или вы можете использовать явные пробелы в шаблоне и вместо этого использовать группу захвата для выделения совпадения чисел:

$num = preg_match("/\s+(\d+)\s+/", $row[tactical], $matches);
$tacNO = number_format(intval($matches[1]));
1 голос
/ 18 октября 2019

Регулярное выражение типа \s[0-9]+\s будет захватывать любое число с пробелами по обе стороны. Если вы хотите убедиться, что символы с обеих сторон являются пробелами (а не символами табуляции и т. Д.), Используйте вместо этого: [ ][0-9]+[ ] Если вы хотите сопоставить числа, в которых пробелы находятся только с одной стороны, используйте квантификатор * после пробела. идентификаторы пробелов.

Как сказал lagripe , группа захвата, вероятно, будет лучшим способом сделать это. Вы можете использовать группу захвата, заключив нужную часть в круглые скобки: [ ]([0-9]+)[ ]. Кроме того, вы можете добавить группу без захвата к пробелам: (?:[ ])[0-9]+(?:[ ]). Он использует их для сопоставления со строкой, но игнорирует их при выводе.

Если вы хотите проверить свои строки регулярных выражений, веб-сайт regex101.com мой любимый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...