检查hashtag是否在字符串php的开头或中间

时间:2016-01-06 22:05:02

标签: php regex

我目前正抓住字符串中的所有#hashtags(即推文)。按预期工作。

但是,我想找到仅在字符串的开头处的字符串OR或在字符串的MIDDLE中(或者足够接近它)。换句话说,找到不在字符串末尾的所有主题标签。

奖励积分 ,如果您还可以指出我如何查看字符串末尾是否存在主题标签的方向。

$tweet = 'This is an #example tweet';

preg_match_all('/(#\w+)/u', $tweet, $matches);  

if ($matches) { // found hashtag(s) }

5 个答案:

答案 0 :(得分:1)

仅在开头匹配:

/^(#\w+)/

要查找特定的#hashtag:

/^#tweet/

匹配中间的任何地方(不是开头或结尾):

/^[^#]+(#\w+)[^\w]+$/

要查找特定的#hashtag:

/^[^#]+#tweet[^\w]$/

仅在最后匹配:

/(#\w+)$/

要查找特定的#hashtag:

/#tweet$/

答案 1 :(得分:1)

// Check if Hashtag is last word; the strpos and explode way:

$tweet = 'This is an #example #tweet';
$words = explode(" ", $tweet);
$last_word = end($words);

// count the number of times "#" occurs in the $tweet.
// if # exists in somewhere else $exists_anywhere equals TRUE !!
$exists_anywhere = substr_count($tweet,'#') > 1 ? TRUE : FALSE ;

if(strpos($last_word,'#') !== FALSE  ) {
   // last word has #
}

来自doc:

  

如果您只想检查一个字符串是否,请不要使用preg_match()   包含在另一个字符串中使用strpos()或strstr()代替它们   会更快。

答案 2 :(得分:1)

preg_match_all('/(?!#\w+\W+$)(#\w+)\W/', $tweet, $result);

这是#tweet人会抓住#tweet

#tweet民众的第二个例子将抓住#Second#tweet

##weweet 的另一个示例将捕获#Another但不会捕获#tweet(即使它在!.或任何其中结束其他非单词字符)

我们差不多完成了,#yup!赢得了什么

最后一个#tweet!晚安将抓住#tweet

当然,你的所有hastags(捕获)都将存储在$result[1]

答案 3 :(得分:0)

好的,我个人会将字符串变成一个单词数组:

$words = explode(' ', $tweet);

然后检查第一个单词:

preg_match_all('/(#\w+)/u', $words[0], $matches);
if ($matches) {
    //first word has a hashtag
}

然后你可以简单地遍历数组的其余部分以获得中间的主题标签。 最后检查最后一个字,

$sizeof = count($words) - 1;
preg_match_all('/(#\w+)/u', $word[$sizeof], $matches);
if ($matches) {
    //last word has a hashtag
}

答案 4 :(得分:-1)

更新/编辑

$tweet = "Hello# It's #a# beaut#iful day. #tweet";
$tweet_arr = explode(" ", $tweet);
$arrCount = 0;

foreach ($tweet_arr as $word) {
    $arrCount ++;
    if (strpos($word, '#') !== false) {
        $end = substr($word, -1);
        $beginning = substr($word, 0, 1);
        $middle_string = substr($word, 1, -1);
        if ($beginning === "#") {
            echo "hash is at the beginning on word " . $arrCount . "<br />";
        }
        if (strpos($middle_string, '#') !== false) {
            $charNum = strpos($middle_string, '#') + 1;
            echo "hash is in the middle at character number " . $charNum . " on word " . $arrCount . "<br />";
        }
        if ($end === "#") {
            echo "hash is at the end on word " . $arrCount . "<br />";
        }
    }
}