{n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
[1-9][0-9]* 这个匹配一个正整数
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。
匹配单词边界稍有不同,但向正则表达式添加了很重要的能力。单词边界是单词和空格之间的位置。非单词边界是任何其他位置。下面的表达式匹配单词 Chapter 的开头三个字符,因为这三个字符出现在单词边界后面:
/\bCha/
\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。例如,下面的表达式匹配单词 Chapter 中的字符串 ter,因为它出现在单词边界的前面:
/ter\b/
非获取匹配 语法: (?=pattern)
非获取匹配 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。
举例说明,“Linux(?=3.0|3.1|3.2|3.3)”能匹配“Linux3.1”中的“Linux”,但不能匹配“Linux4.0”中的“Linux”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
String s2 = "Windows 1.03 Windows 2.0 VB Windows 95 Windows 98 . Windows 2000 Windows Xp . Windows Vista .";
// Pattern r = Pattern.compile("Windows (?=95|2000)");
Pattern r = Pattern.compile("Windows (95|2000)");
Matcher matcher = r.matcher(s2);
while(matcher.find()) {
String group = matcher.group();
System.out.println(group);
}
注释打开,使用不同的正则,结果不一样,分别是
Windows
Windows
和
Windows 95
Windows 2000
参考博客https://blog.csdn.net/wdquan19851029/article/details/110954185