希望标题有意义,我尝试过。
我想做的是找到一个特定字符串在字符串中的第一次出现,然后当我找到匹配项时,获取进行该匹配的两个双引号之间的所有内容。
例如:
假设我正在尝试在以下字符串中找到“ .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?这有可能吗?
答案 0 :(得分:2)
您将使用express-rate-limit和可选的$matches
参数。
$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及其伙伴strrev
和substr
来完成此操作。