删除字符串中的所有哈希标记及其后面的单词

时间:2014-06-06 12:53:55

标签: php regex

我有以下正则表达式删除主题标签:

preg_replace('/#([\w-]+)/i', '$1', $string);

并说我有以下字符串:

Top idr 160\nDisc 5rbu\/pcs pembelian di atas 4pcs \n#onlineshop#lalashop88#jualanku#jualansis#olshop#baju#dress#import#bkk#bkkfashion#bangkok#celana#hotpants#goodquality#jumpsuit#bustier#pants#clothes#indoshop#indonesiashop#jualansis#medan#medanshop#trusted#trustedolshop#trustedshop#goorder#gofollow

如何删除它,以便最后得到这个字符串:

Top idr 160\nDisc 5rbu\/pcs pembelian di atas 4pcs \n

请注意,主题标签没有被空格分隔,但如果它被空格分隔,我也希望这个正则表达式能够正常工作

这是另一个测试用例:

Top idr 160\nDisc #testing 5rbu\/pcs pembelian di atas 4pcs

应该将其转换为

Top idr 160\nDisc 5rbu\/pcs pembelian di atas 4pcs

4 个答案:

答案 0 :(得分:2)

你可以使用像这样的简单函数在没有正则表达式的情况下完成:

function getCleanString($sourceStr, $delimiter = '#') {
    $sourceStrArr = explode($delimiter, $sourceStr);
    return !empty($sourceStrArr[0]) ? $sourceStrArr[0] : $sourceStr;
}

用法:

$sourceStr = 'Top idr 160\nDisc 5rbu\/pcs pembelian di atas 4pcs \n#onlineshop#lalashop88#jualanku#jualansis#olshop#baju#dress#import#bkk#bkkfashion#bangkok#celana#hotpants#goodquality#jumpsuit#bustier#pants#clothes#indoshop#indonesiashop#jualansis#medan#medanshop#trusted#trustedolshop#trustedshop#goorder#gofollow';

var_dump(getCleanString($sourceStr));

输出:

enter image description here

答案 1 :(得分:2)

您可以尝试/#.+?\b/,匹配#后跟一个或多个字符,并在第一个字边界处终止。根据标签中允许使用哪些字符,您可能已经完全剥离了。

preg_replace('/#.+?\b/', '', $string);

如果hastags包含句点或短划线等内容,您可能需要使用/#[\w\-.]+/之类的内容,其中\w\-.是可能的主题标签字符集(\wA-Za-z0-9和{ {1}},以及_.(如下面的评论所指出的,-需要在字符组中进行转义。)

-

虽然如果你不了解正则表达式,也许通过字符串操作解决它可能是一个更好的选择,所以你完全理解你的代码。

答案 2 :(得分:1)

试试吧

preg_replace("/#(.*)$/i", "", $input_lines);

用空字符串替换#....它只允许标签之间的空格,而不是回车。

答案 3 :(得分:0)

如果您只想删除'#'后面的一切。从字符串然后

/#.*/i

应该工作。