我正在做一个能够自动捕捉关键字的简单教程,代码如下: -
$content = "#abc i love you #def #you , and you?";
preg_match_all("/[\n\r\t]*\#(.+?)\s/s",$content, $tag_matches);
print_r($tag_matches);
output:-
Array ( [0] => Array ( [0] => #abc [1] => #def [2] => #you ) [1] => Array ( [0] => abc [1] => def [2] => you ) )
'#' symbol with words are the keywords
输出是正确的,但是如果我在关键字旁边插入任何标点符号,例如:#you,输出将成为你,我可以知道如何在关键字后过滤标点符号吗?
除此之外,如果我像#def#you一样插入任何关键字,输出是def#you,是否有人可以帮我分开/
全部谢谢。
答案 0 :(得分:1)
尝试使用word boundary \b
代替空白\s
。当匹配到达单词字符以外的任何内容时(即[a-zA-Z0-9_]
),这将停止匹配。
/[\n\r\t]*\#(.+?)\b/s
从概念上讲,这就是你试图通过在那里放空格(即表示单词结尾)所做的事情。
答案 1 :(得分:1)
你可以尝试:
/[\n\r\t]*\#([\w]*)\s/s
*实际上与+?具有相同的行为。通过匹配。你是每个角色。如果您有带连字符的标记,则可能需要添加 - 括号内部。