Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我希望从Java中匹配的模式中提取值_Java_Regex - Fatal编程技术网

I';我希望从Java中匹配的模式中提取值

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。括号中的所有内容都构成一个捕获组,您可以稍后通过索引访问该组。但是您可以创建不需要非捕

我正在使用这个正则表达式:

([\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。

括号中的所有内容都构成一个捕获组,您可以稍后通过索引访问该组。但是您可以创建不需要非捕获的组:
(?:…)
,那么它将不会在
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