根据java.util.regex.Pattern文档,^
表示否定,也表示行的开头。我如何弄清楚,^
在任何程序中使用了什么?
来自Thinking in Java的程序(与上述问题无关)
import java.util.regex.*;
public class ReFlags {
public static void main(String[] args) {
Pattern p = Pattern.compile("[^java]", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher m = p.matcher(
"java has regex\nJava has regex\n" +
"JAVA has pretty good regular expressions\n" +
"Regular expressions are in Java");
while(m.find())
System.out.print(m.group());
}
}
给出输出
hs regex
hs regex
hs pretty good regulr expressions
Regulr expressions re in
模式^[java]
提供输出jJJ
。
模式(^java)
,^(java)
和^java
提供输出javaJavaJAVA
。
我理解[^java]
的含义,但其他四种模式意味着什么?
除了输出中的单词java(case-insensitive)之外,我还能做些什么呢?
答案 0 :(得分:3)
[^java]
- >它匹配任何charcater但不匹配j
或v
或a
。 [^..]
称为否定字符类。它匹配除了被否定的charcater类中存在的字符匹配的字符之外的所有字符。
^java
- >它匹配行开头的字符串java
。您可以按m.group(0)
打印匹配。
^(java)
- >它捕获一行开头的字符串java
。您可以按m.group(0)
打印匹配,并在m.group(1)
之前打印第一个捕获组内的字符,其中m
是Matcher
类的对象。因此,您可以从java
和m.group(0)
获取字符串m.group(1)
(^java)
- >与上面相同,它捕获了一行开头的字符串java
。
答案 1 :(得分:1)
在正则表达式中,[…]
表示字符类。角色类有自己的迷你语言:适用不同的特殊字符集,它们有不同的含义。
最好的办法是将正则表达式中的^
视为行首锚。 但是,在上下文[^abc]
中,这是一个否定的字符类,即匹配除a
或b
或c
之外的任何单个字符。
差异的另一个例子是-
。一般来说,它只是一个文字-
字符。但是,在字符类中,它定义了一个范围。 (例如,[a-z]
匹配所有ASCII小写字母。)