在PHP中查找和删除文本中的主题标签

时间:2015-04-21 10:17:10

标签: php tags

我正在使用PHP,并希望从文本末尾删除所有主题标签(在本例中为#stack #overflow)并将它们放入数组中。 这是一个示例文本:

  

Lorem ipsum,http://example.com/#hello consetetur diam #nonumy sed   diam voluptua。 #stack #overflow

这是我想要的输出:(最后没有主题标签)

  

Lorem ipsum,http://example.com/#hello consetetur diam #nonumy sed   diam voluptua。

怎么做?

1 个答案:

答案 0 :(得分:0)

要捕获数组中的所有主题标签并从该字符串中删除它,您可以执行以下操作:

 $string = 'Lorem ipsum, http://example.com/#hello consetetur diam #nonumy sed diam voluptua. #stack #overflow';

// match all hashtags and keep them in a named capture group, to easily get the key later.
preg_match_all('/(?P<hashtags>\#\w+)/', $string, $matches);
$string = str_replace($matches['hashtags'], '', $string);

var_dump($matches['hashtag']);
Array
(
    [0] => #hello
    [1] => #nonumy
    [2] => #stack
    [3] => #overflow 
)

var_dump($string);
// 'Lorem ipsum, http://example.com/ consetetur diam  sed diam voluptua.  ' (length=70)

如果您喜欢这种方式,现在只需要弄清楚如何修剪超出的空白区域。

- - - - - - - - EDIT2

如果您只想捕获最后一个标签,则必须将正则表达式更改为'/(?P<hashtag>\#\w+$)/'

您可能想要explanation of the pattern我建议。

- - - - - - - - EDIT3

这个新问题不同,并为所需的逻辑打开了不同的视角。

//keeping the same $string as above, you can easily get the substring after a dot (for example) til the end of the string with: 
$endOfString = substr($string, strrpos($string, '.') + 1);

// now you can use a regexp, or the 'explode()' function
preg_match_all('/(?P<hashtags>\#\w+)(?:\s)?/', $endOfString, $matches);
$string = str_replace($matches['hashtags'], '', $string);

var_dump($matches['hashtags']);
var_dump(trim($string)); 

与往常一样,你应该对它进行一些尝试以获得适合所有不同情况的好东西