Получить значение строки запроса из URL внутри большей строки с помощью PHP

0

У меня есть эта строка html, содержащая очень специфический URL-адрес, который мне нужно захватить.

$string = 'Hi, this is a long string,
<br>
some more text, and then suddenly, a script tag!
<script type="text/javascript" src="http://www.example.com/static/123456/js/SiteCatalyst.js"></script>
<p>more text here</p>
<script type="text/javascript" src="http://www.example.com/other.js"></script>
and then, the end...';

Уловка, мне нужно значение 123456, которое находится внутри этой строки;

http://www.example.com/static/xxxxxx/js/SpecificScript.js

Поскольку это значение может (и будет) изменяться в строке, оно должно анализироваться динамически. Мой первый подход заключался в том, чтобы найти все URL-адреса внутри строки, но это может быть слишком дорого, если есть много URL-адресов.

TL; DR: Как я могу получить значение xxxxxx, которое находится внутри URL-адреса, который находится внутри более крупной строки html?

  • 0
    всегда ли он существует в атрибуте src? является http://www.example.com/static/ статической частью?
  • 0
    @AvinashRaj да, он всегда будет внутри тега скрипта.
Показать ещё 1 комментарий
Теги:
preg-match

4 ответа

1
Лучший ответ

Используйте \K чтобы игнорировать ранее сопоставленные символы от печати в финале.

src="http://www.example.com/static/\K\d+(?=\/)

DEMO

$string = 'Hi, this is a long string,
<br>
some more text, and then suddenly, a script tag!
<script type="text/javascript" src="http://www.example.com/static/123456/js/SiteCatalyst.js"></script>
<p>more text here</p>
<script type="text/javascript" src="http://www.example.com/other.js"></script>
and then, the end...';
preg_match('~src="http://www.example.com/static/\K\d+(?=\/)~', $string, $matches);
echo $matches[0];

Вывод:

123456
  • 0
    это всегда на этом пути: example.com/static
  • 0
    посмотри мое обновление ...
Показать ещё 2 комментария
1
http:\/\/www\.example\.com\/static\/(\d+)\/js

Попробуйте это. Захватите захват. Смотрите демоверсию.

https://regex101.com/r/nL5yL3/1

  • 0
    Это отчасти работает. Вместо того, чтобы просто возвращать $match[0] = 123456 он возвращает 2 элемента в массиве, где первым является полный URL-адрес (ненужный). Есть идеи почему?
  • 0
    @andufo match[0] return the match string always. используйте match[1] чтобы получить правильную группу
0

Использование внешнего вида

(?<=http:\/\/www.example.com\/static\/)\d+(?=\/js)

Пример регулярного выражения

  • 1
    Получить значение строки запроса из URL внутри большей строки с помощью PHP Javascript не поддерживает lookbehind. Но ОП хочет PHP
0

Вы можете использовать php preg_match_all() и получить номер

$string = 'Hi, this is a long string,
<br>
some more text, and then suddenly, a script tag!
<script type="text/javascript" src="http://www.example.com/static/123456/js/SiteCatalyst.js"></script>
<p>more text here</p>
<script type="text/javascript" src="http://www.example.com/other.js"></script>
and then, the end...';

preg_match_all('!\d+!', $string, $matches);
echo $matches[0][0]; //output 123456
  • 0
    Это позволит получить все цифры, а не только тот, который я ищу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню