java - 使用正则表达式,是否可以在同一范围内同时使用 "is"和 "is not"范围定义?

标签 java regex

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

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

我现在无法在应用程序中运行测试示例以查看我的想法是否有效,因为正在搜索的数据量非常大,并且会搞砸它已经收集的匹配项。我只是因为这个才问。

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

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

我宁愿让它按照我认为第一个的方式工作(任何数字、小写或大写字符,或不是空格、>、<、句号、! 或?的其他正常字符) ) 而不是第二个,后者只有一个或运算符。

我使用的正则表达式测试器给了我不同的时髦结果,这让我感到困惑。

另请注意:我在一个捕获组中使用它,然后是一个 catch everything 匹配项,我可能会或可能不会正确使用它。因此,如果您想包括如何遵循我正在尝试的内容以及如何正确地做到这一点,请随意。我主要只是想知道这是否可能,或者它是否是一种不正确的方法。

最佳答案

为什么你需要\w

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

这已经匹配所有字母数字字符,因为它们既不是空格也不是您提到的任何标点字符。

一般来说,您可以在某种程度上减去字符类,例如,要匹配排除数字的字母数字,您可以这样做

[^\W\d]

因为 [^\W]\w 匹配相同,而 \d 从中减去,因为它在否定字符中类。

编辑:

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

[a-z-[e-g]]

匹配 [a-z] 范围内的任何字符,不包括 efg。但是Java没有这个特性。

关于java - 使用正则表达式,是否可以在同一范围内同时使用 "is"和 "is not"范围定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784774/

相关文章:

java - 使用 jList 中所选对象的信息

sql - 如何在 postgresql 中用其词根替换单词?

c# - 从字符串中获取特定部分

java - 在 Java 中使用 PrintWriter 创建文件并写入该文件

java - 反射 - 继承的字段全部为 null 或为空

java - Android:如何在布局已经包含按钮的情况下以编程方式覆盖整个布局?

用于匹配和选择特定 URL 的正则表达式

javascript - 如何在 JavaScript 中将变量传递到 regExp 对象并使其工作

c# - 正则表达式匹配任何单词组合但不匹配单个小数

java - JAVA 中的机器人 KeyEvent.VK_AT 问题