此问题在此处已有答案:
RexEx not matching the last group(1个答案)
21天前关闭
我有一些样本文本
project=blah AND blah=something OR issuetype!="blah" AND someissue IN somefunction("blah") OR blahing <= "somehing"
字符串
我试图写一个正则表达式,它可以分别匹配操作数和AND/OR。
例如:
- 比赛1组1将是项目
- 第2组比赛将是废话
- match 2 group 1将是AND
- 第三场比赛第一组将是废话
- 第三组第二场比赛将是
等等.
我越来越接近这个表达了
(((?!AND |OR |or |and ).*?)(>=|<=|~|!=|=|!~|>|<| IS | IS NOT | WAS | WAS IN | WAS NOT | WAS NOT IN | CHANGED IN | NOT IN| IN )(?!AND |OR |or |and ).*?)\s|(AND |and |OR |or )
型
但它和最后两个操作数不匹配
1条答案
按热度按时间1aaf6o9v1#
首先警告:这不是一个包罗万象的解决方案。
如果您的问题中提到的所有内容都是这样的格式:
字符串
如果你还想接受诸如
型
则可将其扩大到:
型
匹配结构:匹配组1:将项连接到前一个(AND/OR)匹配组2:比较的左侧位置匹配组3:比较项(=,!=,>,<,>=,<=)匹配组4:比较的右侧位置
匹配组1:
(?:(AND|OR)\s+|^\s*)
-(AND
或OR
)或行的开头匹配组2:
("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?)
[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?
个[^\s\(=<>!]+
任何非空格且非(
或比较运算符的值- optionally followed by a
(某物,“其他某物”,...)'匹配组3:
(!?=|[<>]=?|IN)
-比较运算符匹配组4:与匹配组2相同
它也会在需要的地方接受空格in with in
""
。我看到的限制:如果你尝试类似的东西,它会坏掉型
此外,多行输入也可能会使其中断。
它应该基本上匹配了整行,这意味着如果在match x和match x+1之间有空格,那么你要么遇到了这个正则表达式不支持的东西,要么输入是错误的