我目前正抓住字符串中的所有#hashtags(即推文)。按预期工作。
但是,我想找到仅在字符串的开头处的字符串OR或在字符串的MIDDLE中(或者足够接近它)。换句话说,找到不在字符串末尾的所有主题标签。
奖励积分 ,如果您还可以指出我如何查看字符串末尾是否存在主题标签的方向。
$tweet = 'This is an #example tweet';
preg_match_all('/(#\w+)/u', $tweet, $matches);
if ($matches) { // found hashtag(s) }
答案 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 />";
}
}
}