【问题标题】:PHP str_replace <tag>Stuff - Things</tag> into <a href="stuff">Stuff<a href="things">Things?PHP str_replace <tag>Stuff - Things</tag> 到 <a href="stuff">Stuff<a href="things">Things?
【发布时间】:2015-07-27 19:48:26
【问题描述】:

$variable 我有 html 代码,内容如下:`

<tag>Lots of Text Here - More Phrases Here</tag>.

我希望能够str_replace两个标签之间的字符串

<tag> string </tag>

我希望读取新代码:

<tag><a href="Lots">Lots</a> <a href="of">of</a>
<a href="text">Text</a> <a href="here">Here</a> - 
<a href="@morephraseshere">@MorePhrasesHere</a></tag>

我知道一次 str_replace 可能会很多,但是如果您至少可以让“这里有很多文本”成为链接,或者如果您可以让 @MorePhrasesHere 成为链接,那就是惊人的。

或者最接近完整解决方案的方法也很棒。

$variable 中的文本字符串随每个条目而变化。如果您不能在 str_replace 中使用 $variable 的 preg_match 或 str_explode 解决方案,那也将是惊人的。

谢谢!

编辑: 目标是将第一个字符串中的每个单词转换为#hashtag,并将第二个字符串中的每个单词转换为@username。服务器知道如何为这两种类型的链接返回有效响应。

【问题讨论】:

标签: php regex preg-match str-replace


【解决方案1】:

下面是我使用preg_matchhttp://php.net/manual/en/function.preg-match.php 的方法。 . 表示任何字符,* 是一个量词,表示前一个字符出现 0 次或多次。因为它是.,所以我们允许一切。 ? 去贪婪,所以它正在寻找- 的第一次出现,然后我们再次拉动其他所有内容,直到&lt;/tag&gt;

<?php
preg_match('~<tag>(.*?)-(.*?)</tag>~', '<tag>Lots of Text Here - More Phrases Here</tag>', $found);
echo '<a href="#' . urlencode(trim($found[1])) . '">' . trim($found[1]) . '</a>' . "\n";
echo '<a href="@' . urlencode(trim($found[2])) . '">' . trim($found[2]) . '">' . '</a>' . "\n";
?>

输出:

<a href="#Lots+of+Text+Here">Lots of Text Here</a>
<a href="@More+Phrases+Here">More Phrases Here"></a>

您应该开始学习元字符和量词。这将帮助您将来编写自己的正则表达式。您应该浏览本网站;有点长,但信息量也很大,http://www.regular-expressions.info/php.html

【讨论】:

  • 是的,我会尝试更多地了解正确的正则表达式,特别是考虑到我最近在其中写了多少以及我知道的很少。非常感谢您的解决方案和链接。我会尽快测试您的代码并阅读更多内容。再次感谢克里斯!
【解决方案2】:

获取此代码。没什么好解释的

$title = '<tag>Lots of Text Here - More Phrases Here</tag>';

preg_match('/<tag>\s*(.+)\s+-\s+(.+)\s*<\/tag>/', $title, $matches);
$res = '<tag>';
$words = explode(' ', $matches[1]);
foreach ($words as $word) 
    $res .= '<a href="#'.$word.'">'.$word.'</a> ';
    $after = str_replace(' ','', $matches[2]);
$res .= '<a href="@'.$after.'">@'.$after.'</a></tag>';
echo $res;

【讨论】:

  • 是的,问题是您要替换字符串“这里有很多文本 - 这里有更多短语”,但我需要在 2 个变量内替换文本。它是“$title = $entry->title;”所以变量是$title。 Chris 做了同样的事情,他 preg_matching 字符串而不是变量。不过,我感谢您的尝试,并且代码实际上 preg_match 了字符串并成功回显。
  • 我特别没有使用常客,因为你说不认识他们。使用使代码变得容易
猜你喜欢
  • 2019-07-21
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多