我如何更改该正则表达式脚本

发布于 2024-12-01 12:51:43 字数 387 浏览 0 评论 0原文

此正则表达式:

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\0\">\\0</a>", $text);

.. 将以 @ 开头的所有单词转换为链接。所以它将 @joshua 变成:

<a href="@joshua">@joshua</a>.. 

但我需要它是:

<a href="joshua">@joshua</a>.. 

所以链接地址中没有 @ 。谁能帮我解决这个问题吗?

This regex:

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\0\">\\0</a>", $text);

.. transforms all words starting with @ into links. So it turns @joshua into:

<a href="@joshua">@joshua</a>.. 

but I need it to be:

<a href="joshua">@joshua</a>.. 

so without the @ in the address of the link. Can anyone help me out with this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梅窗月明清似水 2024-12-08 12:51:43
$text = preg_replace('/@(\S+)/', '<a href="$1">$0</a>', $text);

注意:[^\s] 可以缩写为 \S

注意:对于反向引用,$0 优于 \\0(如 手动)。

$text = preg_replace('/@(\S+)/', '<a href="$1">$0</a>', $text);

Note: [^\s] can be shortened to \S.

Note: $0 is preferred over \\0 for backreferences (as stated in the manual).

寄风 2024-12-08 12:51:43
$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text);

如果您阅读 preg_replace 文档,您会注意到 \\0 是整个匹配,\\N 是第 N 个匹配。由于您已经捕获了名称(([^\s]+) 部分),因此您只需将 \\0:s 之一更改为 \\1

编辑:同样从文档中,您会看到从 PHP 4.0.4 开始,首选形式不是 \\N,而是 $N。因此,如果您有最新(或者更确切地说,不是旧的)PHP 版本,则应将其更改为 $0$1

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text);

If you read the preg_replace documentation, you notice that \\0 is the entire match, and \\N is the N:th match. Since you already capture the name (the ([^\s]+) part), you just need to change one of the \\0:s to \\1.

EDIT: Also from the documentation, you'll see that from PHP 4.0.4, the preferred form is not \\N, but $N. So, if you have a recent (or rather, not old) PHP version, you should change it into $0 and $1.

孤星 2024-12-08 12:51:43

需要使用\\1来获取括号内的部分; \\0 是整个匹配。所以你需要的是

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text);

You need to use \\1 to get the part in parentheses; \\0 is the whole match. So all you need is

$text = preg_replace("/@([^\s]+)/", "<a href=\"\\1\">\\0</a>", $text);
誰認得朕 2024-12-08 12:51:43
$text = preg_replace("/(@)([^\s]+)/", "<a href=\"\\2\">\\1\\2</a>", $text);

这未经测试,但应该有效。

$text = preg_replace("/(@)([^\s]+)/", "<a href=\"\\2\">\\1\\2</a>", $text);

This is untested, but should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文