量指定子a?
は一致するはずa single or no occurrence of a
です。指定されたプログラムはjava.util.regex
package を使用して正規表現を文字列と照合します。
私の質問は、プログラムの出力/パターン マッチングの結果についてです。
プログラムの出力:-
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 0
しending at index 0
、次に aに一致するべきではありません""
starting and ending at index 1
か? そうすべきだと思います。
このように、は文字列から 'smatcher
を探し続けているように見えます。そして、 's'a
がなくなったことが確認されるとa
(つまりend
、文字列の ? )、zero occurrence
/ が存在しないa
?を探します。それは退屈だと思いますし、そうではありません。しかし、開始と終了の?starting and ending at 0
に一致する前に"" を見つける必要があります。index 0
index 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.");
}
}
}
}