regex - 正则表达式匹配字符串不在某些括号中
问题描述
有谁知道如何编写正则表达式来获取以下文本中不在和括号中的所有123
s ?apple
banana
apple = {
123 1647 4939 5025
}
grape = {
1647 123 1647 4939 5025
}
grape_number = 123
123 = {
orang_number = 456
}
banana = {
1647 123 1647 4939 5025
}
解决方案
如果您的正则表达式风格允许非固定宽度的负回溯,您可以使用这个正则表达式:
(?<!(?:apple|banana) *= *{[^{}]*)123
在此处查看演示。
否则,您可以使用一些启发式方法,例如以下表达式(在 PCRE 中工作):
(?<!apple)(?<!banana)(?<=\w) *= *{[^{}]*\K123|123(?![^{}]*\})
这匹配123
未包含在大括号内的所有内容,或者,如果是,则括号未“分配”到apple
或banana
。
在此处查看演示。
如果两个\K
运算符都不允许,您可以使用:
(?<!apple)(?<!banana)(?<=\w) *= *{[^{}]*(123)|(123)(?![^{}]*\})
并提取组$1
和$2
。
推荐阅读
- javascript - 优化particle.js后台,避免CPU占用过高
- c++ - 如何在 MSVC C++ 中为 x64 迁移 x86 代码
- r - 如何使用 R 在条形图中添加没有数据的箱?
- java - 使用 com.google.api.client.http.HttpRequest 时如何忽略 SSL 检查
- log4j - 如何在 flink docker 中使用异步日志记录
- python - Beautiful Soup 没有得到完整的 div
- angular - TinyMCE - 允许文本作为表格的直接子级
- javascript - 如何在鼠标悬停时更改下拉选项的背景颜色?
- asp.net - ASP.NET 和 IIS 6.0 动词在上传后重置为默认值
- c++ - 线程使用计数器 C++