【发布时间】:2016-04-09 21:03:21
【问题描述】:
我正在尝试匹配以下文本:
"abc" matches "b" and field[cba] = "cba" or (field[cba] matches "c") and "cc" = "bb"
“匹配”之前和之后的部分进入命名组。
我需要将“abc”匹配为${left},将“b”匹配为${right},然后在第二个匹配中匹配“field[cba]”/“c”。
我需要为 ${left} 和 ${right} 设置界限,以便它们在以下情况下中断:
左:
- 前面应该是:
" and "、" or "、"(",当不在双引号 (") 中时 - 如果这些都不存在,那么它可能是字符串的开头
对:
- 后面应该跟以下任何一个:
" and "、" or "、")",当不在双引号 (") 中时 - 如果这些都不存在,那么它可能是字符串的结尾
我想使用的替换正则表达式模式是:
RegExpMatch(${left}, ${right})
所以得到以下输出:
RegExpMatch("abc","b") and field[cba] = "cba" or (RegExpMatch(field[cba],"c")) and "cc" = "bb"
我试过了:
(?<=^|\(| or | and )(?<left>.*?) matches (?<right>.*?)(?=\)|$| and | or )
这有几个问题:
- 使用
^作为字符串的开头似乎会使向后看变得贪婪,即使之前有" or "或" and ",它也会从字符串的开头捕获,这很奇怪,因为$似乎工作正常 - 我不知道如何告诉
" or "、" and "、"("或")"仅在不在引号中(在文字中)时匹配
您能帮我找出要应用的正确常规模式吗?
【问题讨论】:
-
您是否在尝试解析表达式?