Java 正则表达式中的量词类型
如果你想在构造正则表达式时指定出现次数,可以使用量词。Java 支持三种类型的量词:贪婪量词、勉强量词和独占量词。
贪婪量词 − 贪婪量词是默认的量词。一个贪婪量词尽可能多地匹配输入字符串(最长的可能匹配),如果匹配未发生,它将离开最后一个字符,并再次匹配。
例如
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter input text: "); String input = sc.nextLine(); String regex = "[0-9]+"; //Creating a pattern object Pattern pattern = Pattern.compile(regex); //Matching the compiled pattern in the String Matcher matcher = pattern.matcher(input); System.out.println(""Matched text: ); while (matcher.find()) { System.out.println(matcher.group()); } } }
输出
Enter input text: Matched text: 45545
勉强量词 − 一个非贪婪/勉强量词尽可能少地匹配,首先非贪婪量词匹配第一个字符,如果匹配未发生,它将从输入字符串中添加另一个字符并尝试匹配。如果你在贪婪量词后放置一个“?”,它将变得勉强或非贪婪量词。
例如
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter input text: "); String input = sc.nextLine(); String regex = "[0-9]+?"; //Creating a pattern object Pattern pattern = Pattern.compile(regex); //Matching the compiled pattern in the String Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println(matcher.group()); } } }
输出
Enter input text: 12345678 1 2 3 4 5 6 7 8
独占量词 − 一个独占量词类似于贪婪量词,唯一的区别是它尝试一开始尽可能匹配更多字符,并且如果匹配未发生,与贪婪量词不同,它不会回溯。
如果你在贪婪量词后放置一个“+”,它将变得独占量词。以下是独占量词的列表
例如
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter input text: "); String input = sc.nextLine(); String regex = "[0-9]++"; //Creating a pattern object Pattern pattern = Pattern.compile(regex); //Matching the compiled pattern in the String Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.print(matcher.group()); System.out.println(); } } }
输出
Enter input text: 45678 45678
广告