找到字符串中的第一个字符串,然后获取所有匹配的引号之间的所有内容

时间:2019-04-24 17:36:28

标签: php regex simple-html-dom

希望标题有意义,我尝试过。

我想做的是找到一个特定字符串在字符串中的第一次出现,然后当我找到匹配项时,获取进行该匹配的两个双引号之间的所有内容。

例如:

假设我正在尝试在以下字符串中找到“ .mp3”的第一个匹配项

然后我的主字符串如下

我的字符串实际上是来自$string = file_get_contents('http://www.example.com/something')仅供参考的HTML

$string = 'something: "http://www.example.com/someaudio.mp3?variable=1863872368293283289&and=someotherstuff" that: "http://www.example.com/someaudio.mp3?variable=jf89f8f897f987f&and=someotherstuff" this: "http://www.example.com/someaudio.mp3?variable=123&and=someotherstuff" beer: "http://www.example.com/someaudio.mp3?variable=876sf&and=someotherstuff"';

在这一点上,我想找到第一个.mp3,然后需要整个匹配的网址位于双引号内

输出应为

http://www.example.com/someaudio.mp3?variable=1863872368293283289&and=someotherstuff

我已经知道如何使用strpos在php中找到匹配项,问题是从那里如何获取引号之间的整个URL?这有可能吗?

2 个答案:

答案 0 :(得分:2)

您将使用express-rate-limit和可选的$matches参数。

preg_match

$r = '".*\.mp3.*"';

您会注意到,我已经掩盖了所有的细微之处,即“位于双引号中的网址”的含义。

使用$ matches参数可能会有些奇怪;它曾经是函数正常工作的一种正常方式,但仍然使用C ++之类的语言。

$m = [];
if(preg_match($r, $subject_string, $m)){
  $the_thing_you_want = $m[0];
}

答案 1 :(得分:1)

有几种方法可以做到这一点。使用strpos(和其他几个字符串操作函数)是一种。如您所述,仅使用strpos只会使您进入第一个“ .mp3”。因此,您需要将其与其他东西结合起来。让我们来玩吧:

$str = <<<EOF
something: "http://www.example.com/someaudio.mp3?variable=1863872368293283289&and=someotherstuff"
that: "http://www.example.com/someaudio.mp3?variable=jf89f8f897f987f&and=someotherstuff"
this: "http://www.example.com/someaudio.mp3?variable=123&and=someotherstuff"
beer: "http://www.example.com/someaudio.mp3?variable=876sf&and=someotherstuff"
EOF;

$first_mp3_location = strpos($str, ".mp3");
//Get the location of the start of the first ".mp3" string
$first_quote_location = $first_mp3_location - strpos(strrev(substr($str, 0, $first_mp3_location)), '"');
/*
 * Working backwards, get the first location of a '"',
 * then subtract the first location of the ".mp3" from that number
 * to get the first location of a '"', the right way up.
 */
$first_qoute_after_mp3_location = strpos($str, '"', $first_mp3_location);
//Then finally get the location of the first '"' after the ".mp3" string

var_dump(substr($str, $first_quote_location, $first_qoute_after_mp3_location - $first_quote_location));
//Finally, do a substr to get the string you want.

这是达到目标所需的迟到的漫不经心的方式,使用regex可能会更好,但是 是一种仅使用strpos及其伙伴strrevsubstr来完成此操作。