Регулярное выражение: поиск номера путем захвата, но исключая - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в регулярных выражениях, и я действительно плох в этом.Я пытался решить эту проблему, но до сих пор не могу получить результат.Итак, я надеюсь, что кто-то сможет мне помочь.спасибо!

$str = "/tqrfq_58533_13";
preg_match_all('/\d+(?>=_)*/', $str, $matches);
print_r($matches); // gets 58533, 13

но я хочу только 58533, а не оба числа.Поэтому я хочу, чтобы массив $ match возвращал «58533» как единственное число

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
preg_match_all('/\d+(?=_)/', $str, $matches);

Если вы хотите получить только одно число, удалите часть *, поскольку это означает, что результат будет более одного.AFAIK, нет таких вещей, как (?>=_).Я использую (?=_), чтобы указать, что _ следует сразу за номером.

Вы можете увидеть эту ссылку для получения дополнительной информации.

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

Используйте /(?<=_)(\d+)(?=_)/ в качестве шаблона в preg_match(), который соответствует цифрам между _

$str = "/tqrfq_58533_13";
preg_match('/(?<=_)(\d+)(?=_)/', $str, $matches);
echo $matches[0]; 
// 58533

Результат проверки в demo

Также вы можете использовать preg_replace() если вы не хотите получать массив как результат

echo preg_replace('/.*?_(\d+)_.*/', "$1", $str);
// 58533
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...