【问题标题】:Using PHP replace regex with regex使用 PHP 用正则表达式替换正则表达式
【发布时间】:2014-03-29 05:09:55
【问题描述】:

我想用相同的哈希标签替换字符串中的哈希标签,但在添加了指向它的链接之后

例子:

$text = "any word here related to #English must #be replaced."

我想用

替换每个主题标签
#English ---> <a href="bla bla">#English</a>
#be ---> <a href="bla bla">#be</a>

所以输出应该是这样的:

$text = "any word here related to <a href="bla bla">#English</a> must <a href="bla bla">#be</a> replaced."

【问题讨论】:

  • 查看 preg_replace 的 php 文档以及如何使用反向引用:be2.php.net/preg_replace
  • @jan 如果你想防止 xss,你需要的还不止这些 :)
  • @Jack,问题是关于用正则表达式替换字符串。我不遵循您对 xss 的引用
  • @jan 输出是 HTML,所以你应该保持警惕......不过,在这种情况下可能没有严重的问题。

标签: php regex string hashtag


【解决方案1】:
$input_lines="any word here related to #English must #be replaced.";
preg_replace("/(#\w+)/", "<a href='bla bla'>$1</a>", $input_lines);

DEMO

输出

any word here related to <a href='bla bla'>#English</a> must <a href='bla bla'>#be</a> replaced.

【讨论】:

  • 您的演示链接已过时。
  • 演示链接失效:Internal Server Error.
【解决方案2】:

这应该会让你朝着正确的方向前进:

echo preg_replace_callback('/#(\w+)/', function($match) {
    return sprintf('<a href="https://www.google.com?q=%s">%s</a>', 
        urlencode($match[1]), 
        htmlspecialchars($match[0])
    );
}, htmlspecialchars($text));

另请参阅:preg_replace_callback()

【讨论】:

  • 您在此处提到的 var $map ... 是动态的,它可能是任何主题标签,例如 #ask、#Answer、...。
  • @user1272589 所以bla bla链接总是一样的?
  • 不,实际上它会像 #English 链接将是 www.google.com?q=English .......类似的东西
  • @user1272589 这让它变得容易多了;更新了我的答案:)
【解决方案3】:

如果您需要从字符串替换模式中引用整个匹配项,您只需要一个 $0 占位符,也称为 replacemenf 反向引用。

所以,你想用一些文本包装一个匹配,你的正则表达式是#\w+,然后使用

$text = "any word here related to #English must #be replaced.";
$text = preg_replace("/#\w+/", "<a href='bla bla'>$0</a>", $text);

请注意,您可以将$0$1 等结合使用。如果您需要使用一些固定字符串将匹配的一部分括起来,则必须使用捕获组。假设您想在一个 preg_replace 呼叫中同时访问 #EnglishEnglish。然后使用

preg_replace("/#(\w+)/", "<a href='path/$0'>$1</a>", $text)

输出将是any word here related to &lt;a href='path/#English'&gt;English&lt;/a&gt; must &lt;a href='path/#be'&gt;be&lt;/a&gt; replace

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2013-12-09
    • 2011-02-21
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多