我正在使用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。
怎么做?
答案 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));
与往常一样,你应该对它进行一些尝试以获得适合所有不同情况的好东西