Java 对于regex,正在同时使用;是";及;不是",;同一范围内的范围定义是否可能?

Java 对于regex,正在同时使用;是";及;不是",;同一范围内的范围定义是否可能?,java,regex,Java,Regex,注意:我使用的第三方应用程序使用regex进行搜索,它有自己的风格,但几乎总是像java风格的regex一样工作。当然这可能无关紧要 在搜索了同一个问题的多种不同方式(用多种方式表达)后,我没有看到任何教程、示例,甚至没有提到是否可以在同一范围内同时使用“是”(肯定?)和“不是”(否定?)定义 我现在无法在应用程序中运行一个测试示例,以查看我的想法是否有效,因为搜索的数据量非常大,将破坏它已经收集的匹配。我这么问只是因为这个 以下是我认为可能有效但导致测试人员行为怪异的示例: [\w^\s<

注意:我使用的第三方应用程序使用regex进行搜索,它有自己的风格,但几乎总是像java风格的regex一样工作。当然这可能无关紧要

在搜索了同一个问题的多种不同方式(用多种方式表达)后,我没有看到任何教程、示例,甚至没有提到是否可以在同一范围内同时使用“是”(肯定?)和“不是”(否定?)定义

我现在无法在应用程序中运行一个测试示例,以查看我的想法是否有效,因为搜索的数据量非常大,将破坏它已经收集的匹配。我这么问只是因为这个

以下是我认为可能有效但导致测试人员行为怪异的示例:

[\w^\s<>.!?]{2}
[\w|^\s<>.!?]{2}
[\w^\s.!?]{2}
[\w| ^\s.!?]{2}

我宁愿让它按照我认为第一个字符的方式工作(任何数字、小写或大写字符,或其他非空格的普通字符,>,为什么需要
\w

[^\s<>.!?]{2}
因为
[^\W]
\W
匹配,并且
\d
被从中减去,因为它在一个否定字符类中

编辑:

一些正则表达式引擎(如XPath、.NET和JGSoft)允许如下灵活的字符类减法:

[a-z-[e-g]]

要匹配范围
[a-z]
中的任何字符,不包括
e
f
g
。但Java没有此功能。

从您的问题来看,似乎没有空格正则表达式符合您的需要,您可以通过以下方法实现:

[\S]{2}

另一种可能性是使用两个范围并将其组合;例如

([\w]|[^\s<>.!?]){2}
([\w]|[^\s.!?]){2}
然而,这确实提出了一个问题,即你在这里实际想要表达什么,因为这个例子(我重写了它)没有太多意义


它所说的是“一个单词字符,或任何不是空格或某些标点符号的字符”。但不是“空格或某些标点符号”的字符类别已经包含了所有的单词字符。所以,除非你的意思有所不同,否则
\w
是多余的。

哦,伙计,谢谢你。我从来没有想过。我甚至不知道这是可能的。嗯,嗯,嗯,你是对的。我想我这么做是因为有时候我不想捕捉奇怪的字符,而且会我花了一段时间才添加了所有我不想添加的字符。我们必须检查大量匹配项,看看它捕获的字符是我不想要的。在扫描了一个音调后,新的字符不断出现,而这个音调也会匹配OP不想要的
。他说他想要这些字符:我宁愿让它按我的方式工作nk第一个可以工作(任何数字、小写或大写字符,或其他非空格的普通字符,>,“任何…不是空格的字符,>,请检查Tim Pietzcker答案中的注释。我在那里解释了它们不解释…请参阅我的最后一段。仅供参考,字符类中唯一的运算符是
^
(仅在开头)和
-
(除开头外).
|
不是运算符,在
[…]
中它只是一个普通字符。好的,谢谢您的澄清
([\w]|[^\s<>.!?]){2}