Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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/4/regex/18.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,如何告诉下面的正则表达式只查找第一个匹配项?下面的代码一直在字符串中查找所有可能的正则表达式 i、 e.我只查找子字符串的索引(200-800;50) public static void main(String[] args) { String regex = "(\\[|\\().+(\\]|\\))"; String testName= "DCGRD_(200-800;50]MHZ_(PRE|PST)_(TESTMODE|REG_3FD)";

如何告诉下面的正则表达式只查找第一个匹配项?下面的代码一直在字符串中查找所有可能的正则表达式

i、 e.我只查找子字符串的索引
(200-800;50)

public static void main(String[] args) {

    String regex = "(\\[|\\().+(\\]|\\))";

    String testName=  "DCGRD_(200-800;50]MHZ_(PRE|PST)_(TESTMODE|REG_3FD)";

            Pattern pattern = 
            Pattern.compile(regex);

            Matcher matcher = 
            pattern.matcher(testName);

            boolean found = false;

            while (matcher.find()) {
                System.out.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());
                found = true;

            }

            if (!found){
                System.out.println("Sorry, no match!");
            }
}
matcher.group(1)
将返回第一个匹配项

如果您的意思是惰性匹配而不是急切匹配,请尝试在正则表达式中的+之后添加


可选地,您可以考虑使用比>+/>代码更具体的内容来匹配括号内的内容。如果只期待字母、数字和几个字符,那么可能会有一些类似于<代码> [-AZ-9;+会更好吗?

第一次匹配将是循环的第一次迭代。只需处理一次迭代就可以了。或者根本不需要循环,只要在find返回true时处理匹配即可。这就是我要找的。感谢您的正则表达式匹配
(200-800;50]MHZ_u(PRE | PST)u(TESTMODE | REG_3FD)
。您需要正则表达式的帮助吗?我只需要第一次出现。即
(200-800;50]
。全部解决!:)matcher.group(1)返回的是第一个捕获组的内容,
(\[\\()
。因此它将是
[
,在这个特定的例子中,它总是
,因为所有三个可能的匹配都是从它开始的。(
组(2)
将返回)`或
)无论如何,不情愿的或更具体的建议似乎是OP想要的,所以+1。等等……不应该
匹配者组(0)
返回第一个匹配项?您可能会凭直觉认为,但是组0实际上返回了整个匹配的表达式。