我想知道是否有一种方法可以表示与任何匹配的字符类。谁能告诉我是否有办法?谢谢。
$ grep '[]' <<< a
grep: Unmatched [, [^, [:, [., or [=
在Java中可以做到这一点。Java 的Pattern
类允许您创建一个字符类,该字符类是另外两个字符类的交集。因此,如果我创建两个没有公共字符的字符类,并且取它们的交集,那么我就创建了一个实际上不匹配的字符类。请考虑下面的代码示例。
String input = "abcdefghijklmnopqrstuvwxyz";
Pattern unPattern = Pattern.compile("[a-c&&[d-f]]");
Matcher unMatcher = unPattern.matcher(input);
System.out.println("Starting matching...");
while (unMatcher.find()) {
System.out.println("Matched " + unMatcher.group());
}
System.out.println("Ending matching.");
在上面的例子中,我有一个匹配"a"、"b"和"c"的字符类。我有一个匹配"d"、"e"和"f"的第二个字符类。我使用&&
运算符将它们相交。由于没有常用字符,因此此正则表达式不会匹配任何字符。话虽如此,我不知道这可能有什么用。但这是可能的。
Posix 正则表达式不提供这种可能性,因为如果]
紧跟在启动类的[
或[^
之后,则该被视为文字]
。 (-
也是如此。
请注意,在 Posix 正则表达式中,在字符类中没有任何特殊意义,因此
grep -E '[s]
匹配反斜杠或小写s
,而不是其他任何内容。(这与您的问题不是很相关,但与其他一些答案相关。
GNU grep 确实实现了对 Posix 正则表达式的一些扩展,包括识别字符类之外的一些非标准反斜杠转义序列。(强调一些。例如,它无法识别d
,这有时会令人惊讶。但它基本上是一个 Posix 实现,所以虽然grep -E 's'
确实匹配任何包含空格字符的行,但grep -E '[s]'
匹配任何带有或
s
的行。