ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 正则表达式,用于提取没有空格的哈希标记

2019-09-01 04:30:29  阅读:217  来源: 互联网

标签:preg-match-all php regex preg-match


我正在使用这个:

$t = "#hashtag #goodhash_tag united states #l33t this";
$queryVariable = "";
if(preg_match_all('/(^|\s)(#\w+)/', $t, $arrHashTags) > 0){
    array_filter($arrHashTags);
    array_unique($arrHashTags);
    $count = count($arrHashTags[2]);
    if($count > 1){
        $counter = 1;
        foreach ($arrHashTags[2] as $strHashTag) {
            if (preg_match('/#\d*[a-z_]+/i', $strHashTag)) {
                if($counter == $count){
                    $queryVariable .= $strHashTag;              
                } else{
                    $queryVariable .= $strHashTag." and ";
                }
                $newTest = str_replace($arrHashTags[2],"", $t);                 
            }
            $counter = $counter + 1;
        }
    }
}
echo $queryVariable."<br>"; // this is list of tags
echo $newTest;   // this is the remaining text

基于上述$t的输出是:

#hashtag and #goodhash_tag and #l33t
united states this

第一个问题:

如果$t =’#hashtag#goodhash_tag美国#l33t这个’;即两个标签之间没有空格,输出变为:

#hashtag and #l33t
#goodhash_tag united states this

第二个问题:

如果$t =’#hashtag #goodhash_tag美国#l33t这#123′;即使用无效的标签#123,它会以某种方式干扰我在$queryVariable中提取的标签列表,就像输出一样

#hashtag and #goodhash_tag and #l33t and // note the extra 'and'
united states this

如果有人请帮忙解决这两个问题?

解决方法:

而不是为你的正则表达式使用这么多的比较等.您可以简单地拥有以下内容:

$t = "#hashtag #goodhash_tag united states #l33t this #123#tte#anothertag sth";
$queryVariable = "";
preg_match_all('/(#[A-z_]\w+)/', $t, $arrHashTags);
print_r( $arrHashTags[1] );

要将它们作为字符串并加入它们,您可以使用implode.

$queryVariable = implode( $arrHashTags[1], " and " );

对于剩余的文本,您可以使用preg_replace或str_replace(无论哪种方式都适合).

这是codepad link.

标签:preg-match-all,php,regex,preg-match
来源: https://codeday.me/bug/20190901/1780749.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有