11

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

即我只寻找子字符串的索引(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!");
            }
}
4

1 回答 1

10

matcher.group(1)将返回第一场比赛。

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

.+或者,您可以考虑使用比匹配括号之间的内容更具体的内容。如果您只期望字母、数字和几个字符,那么类似的东西可能[-A-Z0-9;_.]+会更好用?

于 2013-09-16T23:21:44.470 回答