Java的正则表达式,你了解多少?

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。


特殊字符


所谓特殊字符,就是一些有特殊含义的字符, 比如:*字符它表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个\\斜杠,\\*。



特殊字符小知识点拓展:

1、()代表组也可以叫分组,什么是分组,是什么时候用到分组呢? a、什么是分组:()里面的是一个子表达式是一个整体,()内的规则只对内有效,括号外的规则作用于整个()。 比如:do(es)?,这里表示可看做:d、o、es三个组合在一起,其中es是一个整体,?只作用(es)整体, 不单作用s也不作用d和o。 b、什么时候用分组:匹配相同范围内的不同值。例如:需要同时匹配gmail、163、sina的邮箱地址。gmail、 163、sina他们都是属于邮箱的后缀。 表达式:\\w{4,20}@(gmail|163|sina)\\.com :单词字符4-20个,一个@,gmail、163、sina 分组中任意一个,最后一个.com。 如果在这里不加上(),\\w{4,20}@gmail|163|sina\\.com,那么|的范围不在是()分组内, 而是整个表达式。sina\\.com被看做一个整体。


2、\\num 引用分组中的内容 当我们需要匹配相同内容时,分组为了我提供了一个方便的引用方式\\num。 例如: , A内容是一样的,所以可以使用\\num来改进。 [\\\\u4e00-\\\\u9fa5]+\\1>:([a-zA-Z]*)是第一个组,\\1就能引用, 所以\\1>相当于([a-zA-Z]*)>


限定符(数量词)



数量词小知识点:

数量词匹配的是前面的子表达式,那么什么是子表达式呢? 比如:zo*,星号作用的只有o单个字符,和z没有任何关系。所以zo*匹配的是:一个z和任意个o。 比如:do(es)?,问号作用的(es)这个分组,所以do(es)?匹配的是:一个d和一个o和零个和一个es。


预定义字符类