总是听见正则正则,但一直没系统的了解一下,今天看见一道面试题:谈谈Java中是如何支持正则表达式的,了解怎么支持之前,得先知道他是啥吧。我们最常见的就是\n换行 \r回车
正则表达式
先看一个例子:从字符串中提取数字
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
按照往常的想法,可能需要把字符串定位到每个字符然后对比,但使用了正则表达式后,大大提高了效率
正则表达式是描述了一种字符串匹配的模式,可以检查一个串是否含有某种子串,将匹配的子串替换,或者从某个串中取出符合某个条件的子串等。
举个实际的例子:用户密码要求由数字字母下划线组成,长度在6~10之间
^ [a-z0-9_-]{6,10}$
^ 开始标记
a-z 字母在a-z之间
0-9 数字在0-9之间
_下划线
-连字符
{6,10} 字符串长度在6-10间
$ 结束标记
为什么要使用正则:
- 测试字符串内地模式,即数据验证
- 替换文本
- 提取符合条件的子串
特殊字符需要用\转义才能表达的它原本的意思,比如想要匹配字符 \ 需要写\,匹配 ( 需要写 (
限定符:
- * 匹配前面的子表达式0或多次,如:zo*可以匹配z或zoo,等价于{0,}
- +匹配前面的子表达式1或多次,如:zo+可以匹配zo或zooo,等价于{1,}
- ?匹配前面的子表达式0或1次,如:do(es)?可以匹配do或does,等价于{0,1}
- {n} 匹配确定的n次
- {n,}至少匹配n次
- {n,m}匹配次数可以在n-m之间
了解这些就差不多了
Java正则表达式
Java中有三个类:
- Pattern:pattern对象是一个正则表达式。没有构造方法,需要调用其公共类的静态方法,返回对象
- Matcher:对输入字符串进行解释和匹配操作。没有构造方法,需要调用pattern对象的matcher方法
- PatternSyntaxException:PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
import java.util.regex.*;
class RegexExample1{
public static void main(String[] args){
String content = "I am noob " +
"from runoob.com.";
String pattern = ".*runoob.*";
boolean isMatch = Pattern.matches(pattern, content);
System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
}
}
java中是如何支持正则表达式操作的?
Java中使用Pattern类表示正则表达式对象,String类中提供了支持正则表达式的操作方法,matches(),replaceAll(),replaceFirst(),split()。pattern对象调用这些方法来进行操作