与任何匹配项的正则表达式字符类?



我想知道是否有一种方法可以表示与任何匹配的字符类。谁能告诉我是否有办法?谢谢。

$ 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的行。

相关内容

  • 没有找到相关文章

最新更新