【问题标题】:Find and convert symbol to anchors查找符号并将其转换为锚点
【发布时间】:2013-01-30 18:09:51
【问题描述】:

对不起,如果这个问题与另一个问题重复,我找不到它:-/

大家好,我猜这是一个简单的正则表达式问题,但请帮帮我好吗?正则表达式对我来说总是那么复杂:-)

在这个例子中:

@2 Lorem ipsum dolor sit amet, consectetur adipiscing elit。现坐 amet quam ante,坐在 amet consectetur ante。 Ut non urna in quam adipiscing consectetur et sed lorem。 Donec venenatis 车辆 搬运工。

我想将@2 转换为

<a href="#2">@2</a>

但用户可以键入“@2Lorem..”而不用空格,也可以是@38427。我怎样才能抓住它后面的“@”符号和数字并转换为锚点?

编辑:而且@可能在文本的中间,它可能并不总是在开头。

【问题讨论】:

  • 所以@2lorem 应该是&lt;a name="#2"&gt;@2&lt;/a&gt;lorem
  • @AkainuLionheart。还有什么可以代替@2?我的意思是如果只替换@2,那没什么大不了的。
  • 可能有很多@s。在一篇帖子中:“@2 你明白了!@4 不……”

标签: php regex anchor


【解决方案1】:
preg_replace('/@(\d+)/', '<a name="#$1">@$1</a>', $string)

样本:

php > $x = 'abc @234lorem def';
php > echo preg_replace('/@(\d+)/', '<a name="#$1">@$1</a>', $x);
abc <a name="#234">@234</a>lorem def

\d - any digit
+ - one or more times

【讨论】:

  • v01pe 和您的都运行良好!但它在@ 之后只有一位,@ 可以有一位或多位我应该放 d++ 吗?
  • 哈哈哈非常抱歉,我使用 print_r 来显示结果(已尝试 preg_match)。它将 1 放在字符串的末尾。我觉得很愚蠢,非常感谢 Marc B!
【解决方案2】:

找到:@([0-9]+) 替换:&lt;a href="#$1"&gt;@$1&lt;/a&gt;

preg_replace('/@([0-9]+)/', '<a name="#$1">@$1</a>', $string);

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多