Php 从句末删除hashtag

Php 从句末删除hashtag,php,regex,hashtag,Php,Regex,Hashtag,我想删除文本末尾以空格和符号开头的所有单词。 不应删除句子中的URL或哈希标记 示例文本: hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö 我尝试了这个,但它删除了所有的hashtag: $tweet = "hello world #dontremoveme foobar http://example.com/#dontremoveme #remove

我想删除文本末尾以空格和符号开头的所有单词。 不应删除句子中的URL或哈希标记

示例文本:

hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö
我尝试了这个,但它删除了所有的hashtag:

$tweet = "hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö";
preg_match_all("/(#\w+)/", $tweet, $matches);
var_dump( $matches );
我的想法是检查每一个从课文末尾开始的单词是否有一个前面有空格的前导,直到它不再是这种情况。
如何将其转换为正则表达式

您可以使用如下内容:[^]+?+$并将其替换为空字符串


有一个例子。由于您具有非ASCII字符,因此。匹配任何字符的运算符应帮助您处理任何字符

以下正则表达式匹配行尾以[Space]开头的所有单词

/( #\S+)*$/g
这将完成以下工作:

$tweet = "hello world #dontremoveme foobar http://example.com/#dontremoveme #remove #removeme #removeüäüö";
$res = preg_replace("/ #\p{L}+\b(?!\s+\p{L})/u", '', $tweet);
echo $res,"\n";
输出:


我刚刚试过你的例子,$res echo是空的。是否需要至少一个PHP版本,或者我遗漏了什么?感谢you@Tom:我的php版本非常旧:php 5.4.4-9 cli构建时间:2012年10月26日13:00:59。您是否复制/粘贴了代码?我完全掌握了我写的东西。是的,我使用了复制粘贴,PHP文件中没有其他内容。我的PHP版本是:PHP版本5.3.28-nmm2有什么想法吗?@Tom:May be 5.3不处理unicode属性\p{L},尝试使用[a-züäö]如何检查问题是否出在我的PHP版本5.3.28-nmm2上?我尝试过了,得到了这个错误:警告:preg_match_all[function.preg match all]:未知修饰符'g'PHP:$tweet=hello world dontremoveme foobarhttp://example.com/dontremoveme remove removeüäüö;preg_match_all/\S+*$/g,$tweet,$matches;var_dump$匹配;我需要更改什么?请尝试以下操作:$re=/\\S+*$/$str=你好世界dontremoveme foobarhttp://example.com/dontremoveme remove removeüäüö;preg_match_all$re、$str、$matches;这是生成的代码,您可以在这里找到:它可以工作,但print_r$匹配输出2个数组-如何在一个数组中获取所有标记?如果在正则表达式周围添加一组括号,第一个匹配应该是所有hashtags:$re=/\\S+*$/,请尝试一下。。。否则,这是一个PHP问题,而不是正则表达式问题,您可以使用标准PHP解决它。
hello world #dontremoveme foobar http://example.com/#dontremoveme