I';我希望从Java中匹配的模式中提取值
我正在使用这个正则表达式: ([\w\s]+)(=|!=)([\w\s]+)((或)和([\w\s]+)(=|!=)([\w\s]+)* 要匹配如下字符串:I';我希望从Java中匹配的模式中提取值,java,regex,Java,Regex,我正在使用这个正则表达式: ([\w\s]+)(=|!=)([\w\s]+)((或)和([\w\s]+)(=|!=)([\w\s]+)* 要匹配如下字符串:i=2或i=3和k=4 当我尝试使用m.group(index)提取值时,我得到: (i,=,2,**和k!=4**,和,k,!=,4)。 预期输出:(i,=,2,或,i,=,3和,k,!=,4) 如何正确提取值 p.S.m.matches()返回true。括号中的所有内容都构成一个捕获组,您可以稍后通过索引访问该组。但是您可以创建不需要非捕
i=2或i=3和k=4
当我尝试使用m.group(index)提取值时,我得到:
(i,=,2,**和k!=4**,和,k,!=,4)。
预期输出:(i,=,2,或,i,=,3和,k,!=,4) 如何正确提取值
p.S.
m.matches()
返回true。括号中的所有内容都构成一个捕获组,您可以稍后通过索引访问该组。但是您可以创建不需要非捕获的组:(?:…)
,那么它将不会在Matcher.group(int)
中被考虑,这是因为您的第三组参数(用于重复表达式的参数)让您感到困惑。尝试使用非捕获参数:
([\w\s]+)(=|!=)([\w\s]+)(?: (or|and) ([\w\s]+)(=|!=)([\w\s]+))*
您正在尝试与表达式上的regexp匹配…您可能希望使用解析器,因为此regexp(如果有)无法进一步扩展…但解析器可以随时扩展
例如,考虑使用ANTLR())< /P>描述。 为什么不简化您的表达式以完全匹配您要查找的内容
=|(?:或|和)|\b(?:(?!或|和)[\w\s])+\b
例子
将鼠标悬停在文本区域中的蓝色气泡上,以查看匹配的内容
示例文本
i= 2 or i =1234 and k!=4
找到匹配项
[0][0] = i
[1][0] = =
[2][0] = 2
[3][0] = or
[4][0] = i
[5][0] = =
[6][0] = 1234
[7][0] = and
[8][0] = k
[9][0] = !=
[10][0] = 4