regex - 正则表达式不匹配字符串中的确切单词
问题描述
我有以下字符串:
group.cluster.namespace.release.app.pod.timer.grpc.server.processing.duration.package.method.error.count
和一个正则表达式:
(?:[^.]+\.){11}([^.]+)\.([^.]+)\.([^.]+)\.(?:[^.]+)
产生匹配:
Group 1: package
Group 2: method
Group 3: error
现在我想在第 3 组是or时不匹配。我尝试了否定的前瞻,但它不起作用。ok
cancelled
(?:[^.]+\.){11}([^.]+)\.([^.]+)\.(?!ok|cancelled)\.(?:[^.]+)
上面的正则表达式有什么问题?
解决方案
在具有负前瞻的模式中,您必须在组中再次匹配除点之外的任何字符。
我还建议使用 wordboundaries 来防止部分匹配,并可能添加一个锚^
来断言字符串的开头。
请注意,否定字符类[^.]+
也可以跨换行符匹配。您可以使用排除换行符[^.\r\n]+
(?:[^.]+\.){11}([^.]+)\.([^.]+)\.(?!ok\b|cancelled\b)([^.]+)\.(?:[^.]+)
查看正则表达式演示。
推荐阅读
- php - 如何更改mysql数据库中图像的目录文件夹
- tensorflow - 运行与以前相同的代码,但我的训练集自动减少到只有 2.5%(在 Google Colab 中训练)?
- mysql - Rails db 列“rank”现在是 MySQL 关键字
- css - React Native 布局 - 文本/图标出现在图像“下方”而不是下方
- bash - ffmpeg 录制屏幕文件格式
- c - 尝试按降序排列数组元素(返回垃圾值)
- android - 如何从可打包数据初始化 androidx ViewModel?
- ios - 使用 segue 在 Swift 中传递数据?
- html - 如何让一个div在Vue中的另一个div中占据100%
- go - OBJ 渲染不正确的纹理坐标