php – 正则表达式,用于提取没有空格的哈希标记
作者:互联网
我正在使用这个:
$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