Java正则表达式仅限第一个匹配项
如何告诉下面的正则表达式只查找第一个匹配项?下面的代码一直在字符串中查找所有可能的正则表达式 i、 e.我只查找子字符串的索引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)";
(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)
将返回第一个匹配项
如果您的意思是惰性匹配而不是急切匹配,请尝试在正则表达式中的+之后添加
可选地,您可以考虑使用比
(200-800;50]MHZ_u(PRE | PST)u(TESTMODE | REG_3FD)
。您需要正则表达式的帮助吗?我只需要第一次出现。即(200-800;50]
。全部解决!:)matcher.group(1)返回的是第一个捕获组的内容,(\[\\()
。因此它将是(
或[
,在这个特定的例子中,它总是(
,因为所有三个可能的匹配都是从它开始的。(组(2)
将返回)`或)
)无论如何,不情愿的或更具体的建议似乎是OP想要的,所以+1。等等……不应该匹配者组(0)
返回第一个匹配项?您可能会凭直觉认为,但是组0实际上返回了整个匹配的表达式。