我需要在字符串中查找所有主题标签但不在链接示例中找到:
#q https://www.youtube.com/watch?v=#Vmyx7cyZcKU #q1 #q3 [ I Want to Get only #q, #q1, #q not hashtags in link ]
我的代码:
$string = "#q https://www.youtube.com/watch?v=#Vmyx7cyZcKU #q1 #q3";
// Link
$string = preg_replace("!(((f|ht)tp(s)?://)[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;//=]+)!i", "<a href='$1' target='_blank'>$1</a>", $string);
// Hashtag
$hashtag_url = $web_url. "hashtag/\\0";
$string = preg_replace("(\s?#\w+)", "<a href='$hashtag_url'>\\0</a>", $string);
见图片我的代码显示!!!
http://i.stack.imgur.com/p8IyE.png
答案 0 :(得分:2)
匹配URL之外的所有主题标签都可以通过匹配URL的正则表达式实现并丢弃它们,然后匹配所有其他上下文中的hastags:
'~(?:f|ht)tps?://[-a-zA-Zа-яА-Я()0-9@:%_+.\~#?&;/=]+(*SKIP)(*F)|#(\w+)~'
请参阅regex demo
$string = "#q https://www.youtube.com/watch?v=#Vmyx7cyZcKU #q1 #q3";
$string = preg_replace("!(?:f|ht)tps?://[-a-zA-Zа-яА-Я()0-9@:%_+.~#?&;/=]+(*SKIP)(*F)|#(\w+)!", "<a href='$1'>$0</a>", $string);
echo $string;
根据您的需要随意调整(尤其是替换模式)。
<强>详情:
(?:f|ht)tps?://[-a-zA-Zа-яА-Я()0-9@:%_+.\~#?&;/=]+
- 网址匹配部分(取自您的代码)(*SKIP)(*F)
- PCRE动词省略匹配并从当前索引继续进行下一场比赛|
- 或#(\w+)
- #
后跟一个或多个字词。要启用\w
以匹配Unicode字母,请在结尾处添加~u
修饰符。