我在php中有一段文本,我希望能够从中提取所有主题标签和推文名称,并将它们打印为一个新字符串。
例如:
$longstring = "blah blah blah #hashtag blah blah @twittername blah email@email.com blah blah #hashtag2 blah blah";
我想创建一个新字符串:
$extracted = "#hashtag @twittername #hashtag2";
我知道如何轻松地做到这一点吗?
我不确定答案是否是正则表达式?可以同时进行并找到两种类型的所有多次出现吗?
答案 0 :(得分:3)
希望这会帮助你。
正则表达式: #[^\s]+|(?<=\s|^)@[^\s@#]+
1。
#[^\s]+
这将与#
匹配,然后匹配所有space
(不包括空格)2。
|
或3。
的背后(?<=\s|^)@[^\s@#]+
匹配@
,然后all
除space
,@
和#
以外查看space
或start of string
我们正在使用preg_match_all
来收集匹配项,并使用implode
将其作为字符串加入。
<?php
ini_set('display_errors', 1);
$string = "blah blah blah #hashtag blah blah @twittername blah email@email.com blah blah #hashtag2 blah blah";
preg_match_all("/#[^\s]+|(?<=\s|^)@[^\s@#]+/", $string, $matches);
print_r(implode(" ",$matches[0]));
<强>输出:强>
#hashtag @twittername #hashtag2
答案 1 :(得分:3)
preg_match_all
解决方案:
$longstring = "blah blah blah #hashtag blah blah @twittername blah email@email.com blah blah #hashtag2 blah blah";
preg_match_all("/(?:^|\s)[#@][^ @#]+\b/", $longstring, $m);
$extracted = implode("", $m[0]);
print_r($extracted);
输出:
#hashtag @twittername #hashtag2
答案 2 :(得分:3)
以下代码适用于您: 首先,我们用空格分割句子。
然后我们检查单词是以“@”或“#”开头。
如果是,那么我们将它附加到新字符串。
<?php
function startsWith($haystack, $needle)
{
return strpos($haystack, $needle) === 0;
}
$longstring = "blah blah blah #hashtag blah blah @twittername blah email@email.com blah blah #hashtag2 blah blah";
$parts = explode(" ",$longstring);
$newString = "";
foreach($parts as $part)
{
if(startsWith($part, "#") || startsWith($part, "@"))
{
$newString.= $part." ";
}
}
echo $newString;