【问题标题】:PHP My Regex Can't Find First HashtagsPHP 我的正则表达式找不到第一个标签
【发布时间】:2016-09-10 00:59:30
【问题描述】:

我尝试在我的字符串中获取所有主题标签并且工作正常,但第一个主题标签我的代码找不到它:

$string = '#q #q #q #q #q #q #q #q #q #q #q #q #q #q #q';

$hashtag_url = $weburl. "hashtag/\\0";
$string = preg_replace("(\s#\w+)", "<a href='$hashtag_url'>\\0</a>", $string);

查看图片(所有标签都可以,只有第一个不):

如果我的链接有我不想在链接中找到主题标签,我需要示例:

http://localhost/#gasd3 #qtest (get only #qtest)

【问题讨论】:

  • 使用这个, " ".$string);,因为您的正则表达式只有在给定空格时才匹配,但第一个主题标签之前没有空格
  • 正则表达式特别需要# 前面的空格字符,而您的第一个#q 没有。
  • “它对我有用”

标签: php string


【解决方案1】:

第一个主题标签之前没有空格...试试这个:

 preg_replace("/(\s*#\w+)/i", "<a href='$hashtag_url'>\\0</a>", $string);

星号表示空格可能存在零次或多次。

【讨论】:

    【解决方案2】:

    你可能想让 \s 像这样可选..

    $string = preg_replace("((\s)?#\w+)", "<a href='$hashtag_url'>\\0</a>", $string);
    

    如果 (\s) 放在括号后跟 ?这是一个修饰符,告诉正则表达式 (\s) 是可选的。

    你可以这样做,不用括号,看起来更乱,但对正则表达式引擎更好。

    $string = preg_replace("(\s?#\w+)", "<a href='$hashtag_url'>\\0</a>", $string);
    

    【讨论】:

    • 我应该提到 regex101 非常好,如果你想玩正则表达式,你的正则表达式看起来像这样regex101.com/r/nA2hB2/1
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    相关资源
    最近更新 更多