首页 > 解决方案 > 正则表达式匹配字符串不在某些括号中

问题描述

有谁知道如何编写正则表达式来获取以下文本中不在和括号中的所有123s ?applebanana

apple = {
      123 1647 4939 5025 
}
grape = {
      1647 123 1647 4939 5025 
}
grape_number = 123
123 = {
      orang_number = 456
}
banana = {
       1647 123 1647 4939 5025 
}

标签: regex

解决方案


如果您的正则表达式风格允许非固定宽度的负回溯,您可以使用这个正则表达式:

(?<!(?:apple|banana) *= *{[^{}]*)123

在此处查看演示。


否则,您可以使用一些启发式方法,例如以下表达式(在 PCRE 中工作):

(?<!apple)(?<!banana)(?<=\w) *= *{[^{}]*\K123|123(?![^{}]*\})

这匹配123未包含在大括号内的所有内容,或者,如果是,则括号未“分配”到applebanana

在此处查看演示。


如果两个\K运算符都不允许,您可以使用:

(?<!apple)(?<!banana)(?<=\w) *= *{[^{}]*(123)|(123)(?![^{}]*\})

并提取组$1$2


推荐阅读