【问题标题】:Find string in text and explode在文本中查找字符串并展开
【发布时间】:2018-07-05 17:20:34
【问题描述】:

我有一条短信:

$body = 'I lorem ipsum. And I have more text, I want explode this and search link: <a href="site.com/text/some">I link</a>.';

如何找到“我链接”并爆破href

我的代码是:

if (strpos($body, 'site.com/') !== false) {
    $itemL = explode('/', $body);
}

但这不起作用。

【问题讨论】:

  • var_dump($itemL)if 之后的结果是什么?
  • 你要炸什么?你期望的输出是什么?

标签: php


【解决方案1】:

RegEx 在这里是不错的选择。试试:

$body = 'I lorem ipsum. And I have more text, I want explode this 
and search link: <a href="site.com/text/some">I link</a>.';

$reg_str='/<a href="(.*?)">(.*?)<\/a>/';

preg_match_all($reg_str, $body, $matches);
echo $matches[1][0]."<br>";   //site.com/text/some
echo $matches[2][0];    //I link

更新

如果您的文本很长,包括许多 href 和许多链接文本,例如 I link,您可以使用 for 循环来输出它们,使用如下代码:

for($i=0; $i<count($matches[1]);$i++){
   echo $matches[1][$i]; // echo all the hrefs
}

for($i=0; $i<count($matches[2]);$i++){
   echo $matches[2][$i]; // echo all the link texts.
}

如果您想用新的href(例如site.com/some?id=32324)替换旧的href(例如site.com/text/some),您可以尝试preg_replace,例如:

echo preg_replace('/<a(.*)href="(site.com\/text\/some)"(.*)>/','<a$1href="site.com/some?id=32324"$3>',$body);

【讨论】:

  • 但是我如何在 foreach 中粘贴 $matches[1][0] ?
  • 谢谢。我有 1 个问题。如何用已建立的匹配替换 $body?示例:我想在文本中替换 site.com/some?id=32324 上的 site.com/text/some。我该怎么做?
  • 如果你已经知道旧字符串,你最好直接用str_replace替换它。如果您不知道确切的旧字符串,可以使用preg_replace 查找旧字符串并将其替换为新字符串。但是,您必须知道如何找到旧字符串的模式。
  • 已更新。希望对您有所帮助。
  • 不要使用正则表达式解析 HTML:stackoverflow.com/a/1732454/67332
【解决方案2】:

您可以使用 DOM 来通过您的 html 进行操作:

$dom = new DOMDocument;
$dom->loadHTML($body);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//a') as $link) {
    var_dump($link->textContent);
    var_dump($link->getAttribute('href'));
}

demo

【讨论】:

  • 请注意,DOM 方法会在 &lt;a&gt;&lt;/a&gt; 之间丢失其他 HTML 标签,如 &lt;span&gt;
  • @Phil:这取决于 OP 需要什么。他仍然可以在循环中使用以下命令获取该链接的整个 HTML:$dom-&gt;saveXML($link),然后进一步解析...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2016-11-14
相关资源
最近更新 更多