Regex: поиск номера до и после - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в regex и застрял, поэтому нужна помощь, чтобы получить id 13 через regex, пожалуйста, спасибо:)

$str = 'How many points would you like to add or subtract?
(Note: Key a negative number to deduct points)

The following user will be updated:

ID: 13
Name: Alex
Company: Unknown
Current Points: 2';

$id = preg_match_all('/ID: (\d+)/', $str); 
print_r($id); // 1

Надеясь найти способ сопоставить '13', а не'1'

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018
$s = "How many points would you like to add or subtract?
(Note: Key a negative number to deduct points)

The following user will be updated:

ID: 13
Name: Alex
Company: Unknown
Current Points: 2";

preg_match("#ID: (?<id>\d+)#", $s, $matches);
print_r($matches['id']); // output: 13
0 голосов
/ 29 ноября 2018

Попробуйте с non-captureing group для идентификатора и capturing group для цифр, таких как $re = '/(?:ID: )(\d+)/m';.См. REGEX

<?php 
$re = '/(?:ID: )(\d+)/m';
$str = 'How many points would you like to add or subtract?
(Note: Key a negative number to deduct points)

The following user will be updated:

ID: 13
Name: Alex
Company: Unknown
Current Points: 2';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
echo $matches[0][1];

DEMO: https://3v4l.org/bChBi

0 голосов
/ 29 ноября 2018

Используйте

(?<=ID: )

для определения позиции, которой предшествует ID:, а затем сопоставьте цифры с \d+:

$str = "How many points would you like to add or subtract?
(Note: Key a negative number to deduct points)

The following user will be updated:

ID: 13
Name: Alex
Company: Unknown
Current Points: 2";

preg_match_all('/(?<=ID: )\d+/', $str, $matches);

Обратите внимание, что если вы толькоища единственное совпадение, вы должны использовать preg_match вместо preg_match_all.

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