【问题标题】:How to ignore a word while capturing with a regex?使用正则表达式捕获时如何忽略单词?
【发布时间】:2013-12-27 07:33:55
【问题描述】:

我有这个字符串:

$text = "What's your #name ?"

我有这段代码捕获“名称”和“039”:

preg_replace("/\B#(\w+)/", "<a href='url'>#$1</a>", $text);

关于如何捕获“名称”而不是“039”的任何想法?

【问题讨论】:

    标签: php html regex special-characters


    【解决方案1】:

    使用消极的向后看:

    echo preg_replace("/(?<!\S)#(\w+)/", "<a href='url'>#$1</a>", $text);
    

    正则表达式验尸:

    • (?&lt;!\S) - 否定的后视 - 断言 # 前面没有非空白字符
    • # - 从字面上匹配 # 字符
    • (\w+) - 第一个捕获组

    Regex101 demo.

    【讨论】:

    • 我将如何捕获这个 以及@Amal Murali?
    • 对不起,我不明白你的问题。你能解释一下吗?
    • 例如,在这个字符串“What's your #name or [#name]?”中,我想捕获3个'name'。 @Amal Murali
    • @lok​​iloq:这是一个不同的问题。请ask a new question.
    【解决方案2】:

    您可以使用[A-Za-z]+ 代替\w+

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多