Регулярное выражение для извлечения числового значения в изменяющейся позиции внутри переменной строки

Как я могу извлечь полужирный n $ str = "differentcontentLocationhttps: //example.com/api/result/13548/data/123456differentstuffincludingwhitespacesandnewlines8484" ; $ str2 = "differentcontentLocationhttps: //example.com/api/result/13548/data/123456" ; meric часть 123456tring, когда большая часть строки может измениться? / data / всегда присутствует и сопровождается соответствующей переменной, числовой частью (в этом случае preg_match ( "@ / data / ([0-9] +) ([^ 0-9] +) @ siU" , $ str , $ matches ); ) Массив ([0] => / data / 123456d [1] => 123456 [2] => d)

differentcontentLocationhttps: //example.com/api/result/13548/ данные / 123456 differentstuffincludingwhitespacesandnewlines8484

$str2

В этом примере мне нужно 123456. Единственными постоянными частями в строке являются, preg_match("@/ads/([0-9]+)(([^0-9]+)?)@siU", $x, $matches);возможно, первая часть URL-адреса, например https: //.

U

Результаты ([^0-9]+), что было бы приемлемо. Но если нет ничего, что соответствует соответствующей числовой части, например, в .этом выражении не получается. Я попытался сделать хвостовую часть опциональной s, но она тоже терпит неудачу; возвращая только первое число числовой части.

php,regex,

1

Ответов: 1


1 принят

UМодификатор алчности замены делает весь жадный подшаблон ленивым здесь, вы должны удалить его вместе с . Вам также не нужен модификатор DOTALL, потому что в вашем шаблоне нет никакого поведения, поведение которого может быть изменено с помощью этого флага.preg_match("@/data/([0-9]+)@i", $str, $matches);.s

/data/

Теперь шаблон будет соответствовать:

  • /data/ - последовательность буквенных символов
  • ([0-9]+)- Группа 1, захватывающая 1 + цифры (такие же, как (d+))

См. Демо-версию PHP .

$str = "differentcontentLocationhttps://e...content-available-to-author-only...e.com/api/result/13548/data/123456differentstuffincludingwhitespacesandnewlines8484";
$str2 = "differentcontentLocationhttps://e...content-available-to-author-only...e.com/api/result/13548/data/123456";
preg_match("@/data/([0-9]+)@i", $str, $matches);
print_r($matches); // Array ( [0] => /data/123456  [1] => 123456  )
preg_match("@/data/([0-9]+)@i", $str2, $matches2);
print_r($matches2); // Array ( [0] => /data/123456  [1] => 123456  )
PHP, регулярное выражение,
Похожие вопросы