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 に答える