regex 努力写正则表达式以分别匹配操作数[重复]

iyfjxgzm  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

此问题在此处已有答案

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 )


但它和最后两个操作数不匹配

1aaf6o9v

1aaf6o9v1#

首先警告:这不是一个包罗万象的解决方案。
如果您的问题中提到的所有内容都是这样的格式:

(?:(AND|OR)\s+|^\s*)("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?)(?:\s*)(!?=|[<>]=?|IN)\s*("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?)(?:\s*)

字符串
如果你还想接受诸如

A = B OR FALSE OR test=123


则可将其扩大到:

(?:(AND|OR)\s+|^\s*)("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?)(?:\s*)(?:(!?=|[<>]=?|IN)\s*("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?))?(?:\s*)


匹配结构:匹配组1:将项连接到前一个(AND/OR)匹配组2:比较的左侧位置匹配组3:比较项(=,!=,>,<,>=,<=)匹配组4:比较的右侧位置
匹配组1:(?:(AND|OR)\s+|^\s*)-(ANDOR)或行的开头
匹配组2:("[^"]*"|[^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?)

  • “[^"]*”-以双引号开头并以双引号结尾的任何内容。
  • [^\s\(=<>!]+(?:\((?:\s*(?:\"[^\"]*\"|[^\)]*)\s*,?)*\))?
  • [^\s\(=<>!]+任何非空格且非(或比较运算符的值
  • (?:((?:\s*(?:“[^"]”))”|[^)])\s*,?)*))?- optionally followed by a(某物,“其他某物”,...)'
  • 引号中的右括号

匹配组3:(!?=|[<>]=?|IN)-比较运算符
匹配组4:与匹配组2相同
它也会在需要的地方接受空格in with in ""。我看到的限制:如果你尝试类似的东西,它会坏掉

A = somefunc1(somefunc2())


此外,多行输入也可能会使其中断。
它应该基本上匹配了整行,这意味着如果在match x和match x+1之间有空格,那么你要么遇到了这个正则表达式不支持的东西,要么输入是错误的

相关问题