标签:如何 回溯 必须 osi 功能 字符集 对象 [] 类别
正则表达式是一种工具,用于匹配和处理文本的字符串。正则表达式使用正则表达式语言来实现的。
它的优点是:功能强大,语言简洁。
缺点:不容易识读。
(本篇文章以Eclipse+Java来验证)
在Java中使用正则表达式,需要引入java.util.regex包中的三个类:Pattern类、Matcher类和PatternSyntaxException.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String str = "fes.onfe"; Pattern pattern =Pattern.compile("\\."); Matcher matcher = pattern.matcher(str); if(matcher.find()) { System.out.println(matcher.group(0)); } System.out.println(str); } }
Pattern用于创建正则表达式的规则,Matcher(相当于引擎)用于执行正则表达式,Matcher的对象matcher就是执行的结果。
String str = "My name is Ben, I‘m Ben"; Pattern pattern =Pattern.compile("Ben"); Matcher matcher = pattern.matcher(str); if(matcher.find()) { System.out.println(matcher.group(0)); // System.out.println(matcher.group(1)); System.out.println(matcher.group()); }
group()和group(1)输出都是Ben,而group(1)则报错。
.字符(英文句号)可以匹配任何一个单个的字符、字母、数字甚至是.字符本身。
\是一个元字符,.字符在正则表达式里有着特殊的含义,如果模式里需要一个.字符,就需要在.字符的前面加上一个\(反斜杠)字符来对它进行转义。
在Java中,需要用 \\. 来表示.字符本身。
使用元字符[和]来定义一个字符集和,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本。
[ns]a可以匹配na,也可以匹配sa。
[Rr]可以用于匹配不区分大小写的r。
为了简化字符区间,使用元字符-(连字符)进行定义。
用元字符^来表明对一个字符集合进行取非匹配,[^0-9]表示不取0-9的任何一个数,除此之外的任意字符都可取。
^的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于跟在^字符后面的那一个字符或字符区间。
在元字符的前面加上一个反斜杠就可以对它进行转义,进而表示元字符本身。(在Java中需要加俩个反斜杠,\\.表示. \\\\表示\)
\n 换行符
\r 回车符
\t 制表符
\d 任何一个数字字符(等价于[0-9])
\D 任何一个非数字字符(等价于[^0-9])
\w 任何一个字母数字字符(大小写均可)或下划线字符(等价于[a-zA-Z0-9_])
\W 任何一个非字母数字或非下划线字符(等价于[^a-zA-Z0-9_])
\s 任何一个空白字符(等价于[\f\n\r\t\v])
\S 任何一个非空白字符(等价于[^\f\n\r\t\v])
在此之前的都是匹配单个字符或字符区间中的一个字符,即需要匹配的字符串的长度是固定的,而接下来将展示如何匹配多个字符,匹配到的字符串的长度不一定。
匹配一个或多个字符
+匹配一个或多个字符(至少一个:不匹配零个字符),a+匹配一个或多个连续出现的a。
匹配零个或多个字符
*匹配零个或多个字符,用法与+相同。
匹配零个或一个字符
?只能匹配一个字符()的零次或一次出现,最多不超过一次
为重复匹配次数设定一个精确的值
{3}意味着模式里的前一个字符(或字符集合)必须在原始文本里连续重复出现3次才算是一个匹配。
为重复匹配次数设定一个区间。
{2,4}最少重复2次、最多重复4次。
匹配“至少重复多少次”
{3,}最少重复3次
贪婪型元字符 懒惰型元字符
* *?
+ +?
{n, } {n, }?
String str = "a <B>AK</B> AND <B>HI</B>"; Pattern pattern =Pattern.compile("<B>.*</B>"); Matcher matcher = pattern.matcher(str); Pattern pattern2 =Pattern.compile("<B>.*?</B>"); Matcher matcher2 = pattern2.matcher(str); if(matcher.find()) { System.out.println(matcher.group()); } if(matcher2.find()) { System.out.println(matcher2.group()); }
第一个匹配输出的是<B>AK</B> AND <B>HI</B>
第二个输出的是<B>AK</B>
即贪婪模式是在符合匹配条件的情况下尽可能匹配长的字符串。
懒惰模式是在符合匹配条件的情况下尽可能匹配短的字符串。
标签:如何 回溯 必须 osi 功能 字符集 对象 [] 类别
原文地址:https://www.cnblogs.com/heibaimao123/p/8472737.html