当前位置: 首页 > article >正文

依据正则表达式拦截文本

正则表达式匹配

因为我是go语言,所以展示golang的

包:"github.com/dlclark/regexp2"

更多欢迎访问:www.zpf0000.com

// CanMatchRegexp return bool 某个字符串是否匹配正则表达式
func CanMatchRegexp(message string, regexpStr string) bool {
	re, err := regexp.Compile(regexpStr)
	if err != nil {
		logger.Error("CanMatchRegexp regexpStr error: ", err)
		return false
	}
	return re.MatchString(message)
}

// CanMatchStringInRegexes return bool 某个字符串是否匹配切片中的任意一个正则表达式
func CanMatchStringInRegexes(message []byte, regexpStrings []string) bool {
	if len(regexpStrings) == 0 || message == nil {
		return true
	}
	for _, regexpStr := range regexpStrings {
		regexpStr1, err := strconv.Unquote(strings.Replace(strconv.Quote(regexpStr), `\\u`, `\u`, -1))
		if err != nil {
			logger.Error("CanMatchStringInRegexes regexpStrings error: ", err)
		} else {
			regexpStr = regexpStr1
		}
		logger.Info(fmt.Sprintf("message is %s, regexp is %s", string(message), regexpStr))
		if CanMatchRegexp(string(message), regexpStr) {
			return true
		}
	}
	return false
}

// WildCardMatch 通配符匹配
func WildCardMatch(pattern string, value string) bool {
	result, _ := regexp.MatchString(wildCardToRegexp(pattern), value)
	return result
}

// 通配符转换
func wildCardFullToRegexp(pattern string) string {
	tempArr := strings.Split(pattern, "*")
	for i, literal := range tempArr {
		tempArr[i] = regexp.QuoteMeta(literal)
	}
	return strings.Join(tempArr, ".*")
}

// RemoveHyperlink 提取超链接中的url
func RemoveHyperlink(hyperlink string) string {
	re := regexp.MustCompile(`<a[^>]+href=["']([^"']+)["'][^>]*>.*?</a>`)
	match := re.FindStringSubmatch(hyperlink)
	if len(match) > 1 {
		return strings.Replace(hyperlink, match[0], "", -1)
	}
	return hyperlink
}

// Regexp2FindAllString Regex2包,返回所以能匹配正则的字符串
func Regexp2FindAllString(re *regexp2.Regexp, s string) []string {
	var matches []string
	m, _ := re.FindStringMatch(s)
	for m != nil {
		matches = append(matches, m.String())
		m, _ = re.FindNextMatch(m)
	}
	return matches
}


http://www.kler.cn/a/501442.html

相关文章:

  • mysql存储过程创建与删除(参数输入输出)
  • ZYNQ初识10(zynq_7010)UART通信实验
  • 解读若依微服务架构图:架构总览、核心模块解析、消息与任务处理、数据存储与缓存、监控与日志
  • 开源 vGPU 方案 HAMi 解析
  • 【云计算】OpenStack云计算平台
  • 【Ubuntu与Linux操作系统:一、Ubuntu安装与基本使用】
  • 【学习笔记】数据结构(十一)
  • 虚拟机防火墙管理
  • Java-数据结构-链表(LinkedList)-双向链表
  • 如何当前正在运行的 Elasticsearch 集群信息
  • 深度学习|表示学习|为什么要有激活函数?|03
  • Uniapp中实现加载更多、下拉刷新、返回顶部功能
  • Qt仿音乐播放器:数据库持久化
  • Educational Codeforces Round 173 (Rated for Div. 2)
  • Flink系统知识讲解之:容错与State状态管理
  • 提升决策支持:五大报表软件功能全面评测
  • 40_Lua循环结构语句
  • 大数据生态系统:Hadoop(HDFS)、Hive、Spark、Flink、Kafka、Redis、ECharts、Zookeeper之间的关系详解
  • C语言:内存中程序是如何运行的
  • SpringBoot开发—— SpringBoot中如何实现 HTTP 请求的线程隔离
  • Golang——Interface类型
  • 关于TCP/IP五层结构的理解
  • Python 中的错误处理与调试技巧
  • 【Elasticsearch】批量操作:优化性能
  • 海外招聘丨卡尔斯塔德大学—互联网隐私和安全副高级讲师
  • Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)