Java正则表达式
正则表达式定义了字符串的模式。
正则表达式可用于搜索、编辑或处理文本。
正则表达式并不局限于任何一种语言,但在每一种语言中都有细微的差异。
正则表达式的示例
字符串只是一个正则表达式,例如一个Hello World正则表达式匹配一个“Hello World”字符串。
. (点)也是一个正则表达式,可以匹配任何字符,如"a"或"1"。
正则表达式示例及说明如下:
正则表达式描述
这是文本
匹配字符串"this is text"
这个\ s + \ s +文本
注意字符串中的\s+。
单词"this"后面的\s+匹配多个空格,然后是is字符串,然后\s+匹配多个空格,然后是文本字符串。
匹配这个实例:这是文本
^ \ d + (\ \ d +) ?
这个定义是以什么开始的
\d+匹配一个或多个数字
? 集合括号中的选项是可选的
匹配\。“。”
匹配示例:“5”,“1.5”和“2.21”。
Java正则表达式与Perl正则表达式最相似。
regex包包含三个主要类:
模式类:
Pattern对象是正则表达式的编译表示。Pattern类没有公共构造函数。要创建Pattern对象,必须首先调用它的公共静态编译方法,该方法返回一个Pattern对象。此方法将正则表达式作为其第一个参数。
匹配器类:
Matcher对象是解释和匹配输入字符串的引擎。与Pattern类一样,Matcher没有公共构造函数。您需要调用Pattern对象上的匹配器方法来获得匹配器。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,表示正则表达式模式中的语法错误。
下面以正则表达式为例。*查找字符串是否包含runnoob子字符串:
实例
进口java.util.regex。*;
类RegexExample1 {
public static void main(String[] args){
字符串内容=“我是新手”+
“从runoob.com。”;
String pattern = “.* runnoob .*”;
boolean isMatch = Pattern。匹配(模式、内容);
system . out。println("字符串是否包含子字符串’ runob '? "“+ isMatch);
}
}
示例的输出结果为:
字符串是否包含子字符串’ runob '?真正的
捕获组
捕获组是一种将多个字符视为单个单元的方法,它是通过将字符分组在括号内创建的。
例如,正则表达式(dog)创建一个包含“d”、“o”和“g”的组。
通过从左到右计算开括号来对捕获组进行编号。例如,在表达式((A) (B ©)中,有四个这样的组:
((A) (B ©))
(一)
(B ©)
©
通过调用Matcher对象上的groupCount方法,可以看到表达式有多少组。groupCount方法返回一个int值,该值指示Matcher对象当前具有多个捕获组。
还有一个特殊的组(group(0)),它总是表示整个表达式。该组不包括在GroupCount返回值中。
实例
下面的例子展示了如何从给定的字符串中查找一个数字字符串:
RegexMatches.java文件的代码:
进口java.util.regex.Matcher;
进口java.util.regex.Pattern;
公开课RegexMatches
{
public static void main(String[] args){
//以指定模式搜索字符串
String line = "此订单为QT3000! "好吗?”;
String pattern = “(\D*)(\ D +)(.*)”;
//创建Pattern对象
Pattern r = Pattern.compile(Pattern);
//现在创建Matcher对象
Matcher m = r.matcher(line);
If (m.find()) {
system . out。println(“找到的值:” + m.group(0));
system . out。println(“找到的值:” + m.group(1));
system . out。println(“找到的值:” + m.group(2));
system . out。println(“找到的值:” + m.group(3));
其他}{
system . out。println(“不匹配”);
}
}
}
上述示例的编译和运行结果如下:
发现值:此订单为QT3000!好吗?
发现值:此订单已为QT下
发现值:3000
发现价值:!好吗?
正则表达式语法
在其他语言中,\意味着:我想插入一个普通(字面)反斜杠到正则表达式,请不要给它任何特殊的含义。
在Java中,\的意思是:我想插入一个正则表达式的反斜杠,所以它后面的字符有特殊的含义。
因此,虽然在其他语言(如Perl)中,一个反斜杠\就足以转义,但在Java中,为在其他语言中转义解析正则表达式,需要两个反斜杠。在Java正则表达式中,两个\表示其他语言中的一个\,这也很容易理解,这就是为什么数字的正则表达式是\d,而普通反斜杠是\。
System.out.print(“\ \”);//输出为
System.out.print(“\ \ \ \”);//输出为\