0

量指定子a?は一致するはずa single or no occurrence of aです。指定されたプログラムはjava.util.regexpackage を使用して正規表現を文字列と照合します。

私の質問は、プログラムの出力/パターン マッチングの結果についてです。

プログラムの出力:-

Enter your regex: a? Enter input string to search: a I found the text "a" starting at index 0 and ending at index 1. I found the text "" starting at index 1 and ending at index 1.

質問:-

a の 1 回または 0 回の出現に一致するはずです。したがって、 a zero-length ""(つまり、の不在/ゼロ回の出現a)に一致し、starting and ending at index 0次に and に一致a starting at index 0ending at index 0、次に aに一致するべきではありません"" starting and ending at index 1か? そうすべきだと思います。

このように、は文字列から 'smatcherを探し続けているように見えます。そして、 's'aがなくなったことが確認されるとa(つまりend、文字列の ? )、zero occurrence/ が存在しないa?を探します。それは退屈だと思いますし、そうではありません。しかし、開始と終了の?starting and ending at 0に一致する前に"" を見つける必要があります。index 0index 1

プログラム:-

import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 *  Enter your regex: foo
 *  Enter input string to search: foo
 *  I found the text foo starting at index 0 and ending at index 3.
 * */

public class RegexTestHarness {

    public static void main(String[] args){

        /*Console console = System.console();
        if (console == null) {
            System.err.println("No console.");
            System.exit(1);
        }*/

        while (true) {

            /*Pattern pattern = 
            Pattern.compile(console.readLine("%nEnter your regex: ", null));*/

            System.out.print("\nEnter your regex: ");

            Scanner scanner = new Scanner(new InputStreamReader(System.in));

            Pattern pattern = Pattern.compile(scanner.next());

            System.out.print("\nEnter your input string to seacrh: ");

            Matcher matcher = 
            pattern.matcher(scanner.next());

            System.out.println();

            boolean found = false;
            while (matcher.find()) {
                /*console.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());*/

                System.out.println("I found the text \"" + matcher.group() + "\" starting at index " + matcher.start() + " and ending at index " + matcher.end() + "."); 

                found = true;
            }
            if(!found){
                //console.format("No match found.%n", null);
                System.out.println("No match found."); 
            }
        }
    }
}
4

1 に答える 1