0

我正在做一个能够自动捕获关键字的简单教程,代码如下:-

$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, ,输出将变为 you, ,请问我如何在关键字后面过滤标点符号?

除此之外,如果我将任何关键字像#def#you, 一样插入在一起,输出是def#you,有没有人可以帮我分开它/

谢谢大家。

4

2 回答 2

1

尝试使用单词边界 \b而不是空格\s。当匹配到除单词字符(即,[a-zA-Z0-9_])以外的任何内容时,它将停止匹配。

/[\n\r\t]*\#(.+?)\b/s

从概念上讲,这就是您通过在此处放置空格(即,表示词尾)来尝试做的事情。

于 2012-08-07T17:30:30.477 回答
1

你可以试试:

    /[\n\r\t]*\#([\w]*)\s/s

* 实际上与 +? 具有相同的行为。通过匹配 . 你是每一个角色。如果您有带连字符的标签,您可能需要在括号内添加 - 。

于 2012-08-07T17:41:37.090 回答