从字符串中删除主题标签

时间:2014-07-11 06:23:41

标签: php regex

我有以下正则表达式:

preg_replace('/#(?=[\w-]+)/', '', preg_replace('/(?:#[\w-]+\s*)+$/', '', $stringText)

基本上用空字符串替换/删除主题标签。

然而,它对以下内容无效:

#jualbaju #blouse #jualmurah #bajumurah #jakarta #jualbajumurah #bajulucu #korea #dress #jualdress #murahmeriah #jualeceran #jualdressmurah #setelanmurah #jualsetelanmurah #bajupink #pink #jualshortdress #atasanmurah #bajukorea #bajukoreamurah #onlineshopindo #olshop #bajukoreamurah\n#jualbajukoreamurah #jualbajumurmer #dresskorea\n\nMinat hubungi cp di bio :) Line : shaneee22

为什么会这样?

4 个答案:

答案 0 :(得分:4)

这应该适合你:

$re = '/#\S+\s*/';
$result = preg_replace($re, '', $input);

Online Demo

编辑:如果您不想从输入中删除换行符,请使用此正则表达式:

$re = '/#\S+[ \t]*/';

答案 1 :(得分:1)

我想谈谈这个话题。我尝试了前两个选项,没有一个工作,它返回空字符串。下面的代码适用于我,我认为它更简单。

$re = '/#*/';
$result = preg_replace($re, '', $input);

答案 2 :(得分:0)

这就是你要找的东西:

$replaced = preg_replace('~#[\w-]+~', '', $yourstring);

请参阅regex demo

<强>解释

  • #匹配哈希
  • [\w-]+匹配一个或多个字词字符或连字符
  • 我们用空字符串替换

出了什么问题?

  • 第一个preg_replace没有替换任何内容,因为它无法找到一系列哈希标记,后跟字符串的结尾($锚点)
  • 第二个preg_replace仅替换了哈希,因为哈希后面的内容只是一个预测(?=[\w-]+),它不会消耗字符

答案 3 :(得分:0)

我不确定您是否只想删除“#”或带有它的名称。

$string = "#jualbaju #blouse #jualmurah #bajumurah #jakarta #jualbajumurah #bajulucu #korea #dress #jualdress #murahmeriah #jualeceran #jualdressmurah #setelanmurah #jualsetelanmurah #bajupink #pink #jualshortdress #atasanmurah #bajukorea #bajukoreamurah #onlineshopindo #olshop #bajukoreamurah\n#jualbajukoreamurah #jualbajumurmer #dresskorea\n\nMinat hubungi cp di bio :) Line : shaneee22";

//Just the '#' removed
$noHashTag = str_replace('#', '', $string);

//The name too
$noHashTag = preg_replace('/#([\w-]+)/i', '', $string);