高端定制网站设计,珠海购物网站制作,京东网页版,电商网站设计注意事项基本介绍 
首先我们需要了解的是正则表达式中的各种元字符的功能#xff0c;主要分为以下几种#xff1a; 
限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 
需要注意的是#xff1a;在 Java正则表达式中#xff0c;两个斜杠 \\ 相当于其它语言中的一个斜杠…基本介绍 
首先我们需要了解的是正则表达式中的各种元字符的功能主要分为以下几种 
限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 
需要注意的是在 Java正则表达式中两个斜杠 \\ 相当于其它语言中的一个斜杠 \ 。 
字符匹配符 
符号含义示例解释[ ]可以匹配的字符列表[abcjs]a、b、c、j、s都可以匹配到[^]不可以被匹配的字符列表[^abc]a、b、c不可以被匹配-连字符a-z可以匹配任意a到z的字母.匹配除 \n 之外的任何字符a..b以a开头b结尾的字符串中包括任意两个字符\\d匹配单个数字字符\\d{3}(\\d)?匹配连续3个或4个数字的字符串\\D匹配非数字字符\\D(\\d)*以单个非数字字符开头后面接任意个数字的字符串\\w匹配单个数字、英文字符、下划线\\d{3}\\w{4}以3个数字字符开头的长度为7的数字字母字符串\\W匹配单个非数字、非英文字符、非下划线\\W\\d{2}以至少一个非数字字母字符开头两个数字字符结尾的字符串\\s匹配任何空白字符空格制表符等\\S匹配任何非空白字符和\s刚好相反 
Java 正则表达式默认是区分大小写的如何实现不区分大小写 
(?i)abc abc 都不区分大小写 a(?i)bc bc 不区分大小写 a((?i)b)c 只有 b不区分大小写 Pattern.compile(regex,Pattern.CASE_INSENSITIVE)方法参数内设置忽略大小写 
选择匹配符 
符号含义示例解释|或者的意思ab|cd匹配ab或者cd 
用于在匹配时有选择的降低匹配标准。  
限定符 
用于指定其前面的字符和组合项连续出现多少次 
符号含义示例说明示例*重复0次或n次(abc)*以abc开头的子串只包含abc的字符串abc,abcabc重复1次或多次(abc)至少以1个abc开头子串只包含abc的字符串abc,abcabc重复0次或1次(abc)?以abc开头的字符串abc{n}限定只能出现n次[a-d]{3}由连续的 a、b、c、d组成的字符串中任意长度为3子串 
定位符 
规定要匹配的字符在字符串中出现的位置比如是在字符串开始还是在结束处。 
符号含义^开头$结尾\\b匹配目标字符串的边界子串之间的空格\B匹配字符的非边界 
这里主要演示一下 \\b 和 \\B : 
public static void main(String[] args) {String content  我爱学习 学习不爱我 学习很快乐;String regex  学习\\B;Pattern compile  Pattern.compile(regex);Matcher matcher  compile.matcher(content);while (matcher.find()){System.out.println(matcher.group());}} 
当我们设置匹配语句为 \\b 的时候输出结果 
学习 
当我们设置匹配语句为 \\B 的时候输出结果 
学习
学习 
可以看到\\b 匹配的是子串学习后是空格的而 \\B 刚好相反。 
分组 
捕获分组 
我们上一篇博客写过分组的案例也就是 group(0)group(1)这种也叫做非命名捕获。 
这里主要介绍一种新的分组方法叫做命名捕获也就是说我们可以自定义组的名字。相比较之前的哪一种它既可以使用非命名捕获通过组号获取匹配的子串也可以通过自定义的名字来捕获。 
语法?namepattern  
其中需要先写一个问号?name是我们对组的命名不要太离谱就行;pattern是我们的正则表达式和非命名捕获是一样的。 
String content  sajnj ax1122s sjnaj4529 s584;String regex  (?group1\\d\\d)(?group2\\d\\d);Pattern compile  Pattern.compile(regex);Matcher matcher  compile.matcher(content);while (matcher.find()){System.out.println(matcher.group(group1));System.out.println(matcher.group(group2));} 
非捕获分组 Java正则表达式中的不捕获匹配Non-capturing Group指的是使用括号来分组匹配但不会将该分组的匹配结果保存到匹配结果中。这样可以在正则表达式中使用括号进行逻辑分组但不会捕获分组的内容从而减少内存开销并提高性能。 也就是说虽然有括号但是不算是一个组你使用组索引 matcher.group(n) 是获取不到结果的。 
String content  industries industry;Pattern pattern  Pattern.compile(industr(?:y|ies));Matcher matcher  pattern.matcher(content);while (matcher.find()){System.out.println(matcher.group(0));} 
输出 
industries
industry 常用分组构造形式说明(?:pattern)匹配 pattern 但不捕获该匹配的子表达式即它是一个非捕获匹配常用来代替我们的或( | )语句。(?pattern) 它是一个非捕获匹配正向预查。例如 Windows (?95|98|NT|2000) 匹配 Windows 2000中的 Windows,但不匹配 Windows 3.1中的 Windows。 (?95|98|NT|2000)正向预查用于确定在匹配 Windows 后面的字符串是 95、98、NT 或者 2000。它使用了竖线字符 | 来表示 或 的关系即满足其中一个条件即可。注意这个预查不会消费输入字符串也不会将 95、98、NT 或者 2000 匹配结果保存到匹配结果中。 因此这个正则表达式可以匹配Windows95、Windows98、WindowsNT 和Windows2000但不会匹配 WindowsXP 或者Windows10。它可以用于查找包含特定版本的 Windows 字符串用于特定的匹配需求。 (?!attern)它也是一个非捕获匹配负向预查。假设有一个正则表达式 (?!abc)它表示匹配任意一个不以 abc 结尾的字符串。例如 Windows (?95|98|NT|2000) 匹配 Windows XP中的 Windows,但不匹配 Windows 2000中的 Windows。 
正向预查  
String content  My operating system is Windows 11,his operating system is Windows XP;Pattern pattern  Pattern.compile(Windows (?11|XP));Matcher matcher  pattern.matcher(content);while (matcher.find()){System.out.println(matcher.group(0));} 
运行结果 
Windows
Windows 调试正则表达式后发现 (?pattern)这种非捕获分组它必须满足括号后面的条件才能被匹配但是比如Windows (?11|XP)要被匹配到的只可能是 Windows 11 或者 Windows XP但是这里的11和XP不会被保存到结果。 
负向预查 
String content  My operating system is Windows 11,his operating system is Windows XP;Pattern pattern  Pattern.compile(Windows (?!8|9|10));Matcher matcher  pattern.matcher(content);while (matcher.find()){System.out.println(matcher.group(0));} 
运行结果  
Windows
Windows 调试正则表达式后发现 (?!pattern)这种非捕获分组它必须满足括号后面的条件才能被匹配但是比如Windows (?11|XP)要被匹配到的只可能是除了 Windows 11 和 Windows XP之外的其他Windows xxxx的字符串而且这里的xxxx同样不会被保存到结果。