Java 正则表达式中的量词类型
javaobject oriented programmingprogramming
如果要在构造正则表达式时指定出现次数,则可以使用量词。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("输入输入文本: "); String input = sc.nextLine(); String regex = "[0-9]+"; //创建一个 Pattern 对象 Pattern pattern = Pattern.compile(regex); //匹配字符串中的编译模式 Matcher matcher = pattern.matcher(input); System.out.println(""Matched text: ); while (matcher.find()) { System.out.println(matcher.group()); } } }
输出
输入输入文本: 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("输入输入文本: "); String input = sc.nextLine(); String regex = "[0-9]+?"; //创建一个 Pattern 对象 Pattern pattern = Pattern.compile(regex); //匹配字符串中的编译模式 Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println(matcher.group()); } } }
输出
输入输入文本: 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("输入输入文本: "); String input = sc.nextLine(); String regex = "[0-9]++"; //创建一个 Pattern 对象 Pattern pattern = Pattern.compile(regex); //匹配字符串中的编译模式 Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.print(matcher.group()); System.out.println(); } } }
输出
输入输入文本: 45678 45678