php从一个文本块中提取所有主题标签和推特名称

时间:2017-05-15 06:24:27

标签: php

我在php中有一段文本,我希望能够从中提取所有主题标签和推文名称,并将它们打印为一个新字符串。

例如:

$longstring = "blah blah blah #hashtag blah blah @twittername blah email@email.com blah blah #hashtag2 blah blah";

我想创建一个新字符串:

$extracted = "#hashtag @twittername #hashtag2";

我知道如何轻松地做到这一点吗?

我不确定答案是否是正则表达式?可以同时进行并找到两种类型的所有多次出现吗?

3 个答案:

答案 0 :(得分:3)

希望这会帮助你。

Regex demo

正则表达式: #[^\s]+|(?<=\s|^)@[^\s@#]+

  

1。 #[^\s]+这将与#匹配,然后匹配所有space(不包括空格)

     

2。 |

     

3。 (?<=\s|^)@[^\s@#]+匹配@,然后allspace@#以外查看spacestart of string

的背后

我们正在使用preg_match_all来收集匹配项,并使用implode将其作为字符串加入。

Try this code snippet here

<?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;