Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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
如何在Java中匹配元组字符串?_Java_Regex_String - Fatal编程技术网

如何在Java中匹配元组字符串?

如何在Java中匹配元组字符串?,java,regex,string,Java,Regex,String,我有像“(C,D)(E,F)(G,H)(J,K)和(C,D)(E,F)(G,H)(J,K)或”((C,D)(E,F)(G,H)(J,K)。如果正则表达式匹配第一个字符串中的模式(这是一个由一个空格分隔的一个元组或一系列元组),如何返回true。我尝试了类似“(\(\([a-Z],[a-Z]\)[;$)+)”,但它不会捕获最后一对元组。如果是第二个和第三个字符串,它应该返回false。如果要匹配一个由逗号分隔的大写字母组成的括号对字符串,每对之间只有一个空格,可以使用如下模式: ^\\([A-Z]

我有像
“(C,D)(E,F)(G,H)(J,K)
(C,D)(E,F)(G,H)(J,K)
”((C,D)(E,F)(G,H)(J,K)
。如果正则表达式匹配第一个字符串中的模式(这是一个由一个空格分隔的一个元组或一系列元组),如何返回true。我尝试了类似
“(\(\([a-Z],[a-Z]\)[;$)+)”
,但它不会捕获最后一对元组。如果是第二个和第三个字符串,它应该返回false。

如果要匹配一个由逗号分隔的大写字母组成的括号对字符串,每对之间只有一个空格,可以使用如下模式:

^\\([A-Z],[A-Z]\\)( \\([A-Z],[A-Z]\\))*$

也就是说:字母、逗号、字母全部放在括号内,后面是零个或多个类似的插入式表达式,每个表达式前面都有一个空格。

如果要匹配一组括号内逗号分隔的大写字母,每对之间只有一个空格,可以使用如下模式:

^\\([A-Z],[A-Z]\\)( \\([A-Z],[A-Z]\\))*$

也就是说:字母、逗号、字母全部放在括号中,后面是零个或多个类似的插入式表达式,每个表达式前面都有一个空格。

这里是正则表达式的问题:

(\([A-Z],[A-Z]\)[ |$])+?
                ^^^^^
你以为这意味着“空格或字符串的结尾”,是吗?它实际上意味着“空格或
或美元符号”。许多特殊字符在放入字符类时会失去其特殊意义

您应该将其替换为
(?:|$)
。此外,末尾的
+?
应该是贪婪的
+

(\([A-Z],[A-Z]\)(?: |$))+
就我个人而言,我真的不喜欢这种“空格或字符串结尾”的东西。我更喜欢重复元组模式(特别是当重复模式不长时):


不用说,您应该使用
匹配
,而不是
查找

这里是您的正则表达式的问题:

(\([A-Z],[A-Z]\)[ |$])+?
                ^^^^^
你以为这意味着“空格或字符串的结尾”,是吗?它实际上意味着“空格或
或美元符号”。许多特殊字符在放入字符类时会失去其特殊意义

您应该将其替换为
(?:|$)
。此外,末尾的
+?
应该是贪婪的
+

(\([A-Z],[A-Z]\)(?: |$))+
就我个人而言,我真的不喜欢这种“空格或字符串结尾”的东西。我更喜欢重复元组模式(特别是当重复模式不长时):


不用说,您应该使用
匹配
,而不是
查找

我想,您可能可以通过以下方法来实现:

\s*|\(([^()\r\n]+)\) 
如果模式不返回空字符串,则将为
false

输出
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配


来源

我想,您可以通过以下方式实现:

\s*|\(([^()\r\n]+)\) 
如果模式不返回空字符串,则将为
false

输出
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配


来源

为什么要使用惰性版本的
+
而不是急切版本?如果您编写
+?
它将只匹配满足表达式所需的数量,而不是全部。为什么要使用惰性版本的
+
而不是急切版本?如果您编写
+?
它将只匹配必须匹配的数量匹配以满足表达式而不是全部表达式。