匹配话题词实现

匹配话题词实现

需求分析

现在社交平台存在大量话题,例如微博
假设话题词的结构如下

#word1#,#word2#,#word3#

实现对话题词的过滤
结构不符合 返回错误

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
function validate_topic_word($string){
# 辅助栈
$match = [];
# 获取字符数
$len = mb_strlen($string,'utf-8');
# 匹配开头是否为'#'且长度不为1
if(mb_substr($string,0,1,'utf-8')!='#' || $len==1){
return false;
}
for($i=0;$i<$len;$i++){
if(mb_substr($string,$i,1,'utf-8')=='#'){
# '#'入栈
array_push($match, '#');
if(count($match)==2){
# 匹配到两个'#' 清空栈
$match = [];
# 匹配两个'#'字符之间是否有值
if(mb_substr($string,$i-1,1,'utf-8')=='#'){
return false;
}
# 已遍历字符串到结尾 跳出循环
if($i+1>=$len) break;
# 匹配两个话题词的连接 #..#,#..#
# 1) 进行匹配','字符
if(mb_substr($string,$i+1,1,'utf-8')!=','){
return false;
}else{
# 2) 匹配','字符后是否为'#'字符
if(mb_substr($string,$i+2,1,'utf-8')=='#'){
continue;
}
return false;
}
}
}
}
// 判断结尾是否是'#'字符
if(mb_substr($string,$len-1,1,'utf-8')!='#' || count($match)!=0){
return false;
}
return true;
}

最后

可结合之前的一篇匹配文章查看
UTF-8下实现正则匹配
如果您有更好的实现方法
欢迎留言🥳

# PHP

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×