我有以下正则表达式删除主题标签:
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
答案 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));
输出:
答案 1 :(得分:2)
您可以尝试/#.+?\b/
,匹配#
后跟一个或多个字符,并在第一个字边界处终止。根据标签中允许使用哪些字符,您可能已经完全剥离了。
preg_replace('/#.+?\b/', '', $string);
如果hastags包含句点或短划线等内容,您可能需要使用/#[\w\-.]+/
之类的内容,其中\w\-.
是可能的主题标签字符集(\w
为A-Za-z0-9
和{ {1}},以及_
和.
(如下面的评论所指出的,-
需要在字符组中进行转义。)
-
虽然如果你不了解正则表达式,也许通过字符串操作解决它可能是一个更好的选择,所以你完全理解你的代码。
答案 2 :(得分:1)
试试吧
preg_replace("/#(.*)$/i", "", $input_lines);
用空字符串替换#....它只允许标签之间的空格,而不是回车。
答案 3 :(得分:0)
如果您只想删除'#'后面的一切。从字符串然后
/#.*/i
应该工作。