正则表达式

Wu Jun 2020-01-03 20:43:49
Categories: > > Tags:

1 语法

在使用正则表达式的各种程序和类库之间,表达式语法并未完全标准化。

1.1 字符

1.2 边界

1.3 量词

1.4 群组

2 使用

2.1 匹配

首先用正则表达式的字符串构建一个 Pattern 对象,然后从这个模式中获得一个 Matcher,并调用他的 matches 方法。

Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
if(matcher.matches()) ...

1)编译标志

在编译这个表达式时,可以设置一个或多个标志

Pattern pattern = Pattern.compile(expression,Pattern.CASE_INTENSIVE + Pattern.UNICODE_CASE);

或在表达式中指定:

String regex = "(?iU:expression)";

各个标志:

2)匹配集合或流

如果想要在集合或流中匹配元素,可以将模式转换为谓词:

Stream<String> strings = ...;
Stream<String> result = strings.fiter(pattern.asPredicate());

其结果中包含了匹配正则表达式的所有字符串。

3)匹配群组

如果正则表达式包含群组,那么Matcher对象可以揭示群组的边界。下面的方法

int start(int groupIndex)
int end(int groupIndex)

将产生指定群组的开始索引和结束之后的索引。

4)抽取匹配

可以直接通过调用下面的方法抽取匹配的字符串
群组 0 是整个输入,而用于第一个实际群组的群组索引是 1。

String group(int groupIndex)

2.2 查找

使用 Matcher 类的 find 方法来查找匹配内容,如果返回 true,在使用 start 和 end 方法来查找匹配的内容,或使用不带引元的 group 方法来获取匹配的字符串。

whiel(matcher.find()){
    int start = matcher.start();
    int end = matcher.end();
    String match = input.group();
}

2.3 替换

Matcher 类的 replaceAll 方法将正则表达式出现的所有地方都用替换字符串来替换。

Matcher 类的 replaceFirst 方法将只替换模式的第一次出现。

2.4 分割

最后,Pattern 类有一个 split 方法,它可以用正则表达式来匹配边界,从而将输入分割成字符串数组。