【问题标题】:Retrieving url from BBCode, discard everything else从 BBCode 中检索 url,丢弃其他所有内容
【发布时间】:2023-04-02 10:45:01
【问题描述】:

我希望从 BBCode 块中删除除 Flickr 照片页面 URL 之外的所有内容,使用以下示例:

[url=http://www.flickr.com/photos/vrfan/6821895917/][img]http://farm8.staticflickr.com/7025/6821895917_a372a271a2_z.jpg[/img][/url]
[url=http://www.flickr.com/photos/vrfan/6821895917/]Y159 being sanded at Daylesford[/url] by [url=http://www.flickr.com/people/vrfan/]VRfan[/url], on Flickr

我想要的只是第一个[url] 标签(http://www.flickr.com/photos/vrfan/6821895917/) 的值——其他所有内容都可以删除。

希望正则表达式向导可以帮助我解决这个问题:)

干杯,

迈克尔。

【问题讨论】:

标签: php regex bbcode


【解决方案1】:

您也可以将substr()strpos() 结合使用,而不是Regex。

$matches = array();
$f = strpos($str, '[url=');
while ($f)
{
    $end = strpos($str, ']', $f);
    $f += 5;
    $matches[] = substr($str, $f, $end - $f);
    $f = strpos($str, '[url=', $end);
}
var_dump($matches);
// Regex Solution
preg_match_all('/\[url=(.+?)\]/i', $str, $matches);
var_dump($matches[1]);

【讨论】:

  • 谢谢,绝对是在正确的轨道上 :) 但是,字符串可能位于较大字符串的中间(用于论坛帖子)。我想不出一种方法来查找帖子中所有出现的 Flickr BBcode,并将您建议的代码应用于每个出现。
  • 我对原代码做了一些改动。显然其中有一个错误,新代码应该可以正常工作。我还添加了另一个使用正则表达式的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-02-06
  • 2012-08-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2021-07-11
相关资源
最近更新 更多