包含0和4-9(4,5,6,7,8,9)的字符串的RegExp模式

时间:2018-10-15 16:28:28

标签: java regex

我正在处理一个字符串。用例是我不希望使用具有4到9或0的任何数字的字符串。

示例:-

std::unordered_set::find

我尝试过以下模式,但没有成功。

g++

3 个答案:

答案 0 :(得分:2)

首先,从字符类中删除逗号。您不是在寻找逗号。

由于您不允许,请勿锚定表达式,而应在字符串中的任意位置进行匹配。实际上,matches为您锚定了表达式,因此我们必须在不允许的字符类之前和之后有意地允许字符:

String pattern = ".*[04-9].*";
if(str.matches(pattern)){
      // disallow
}

Live Example

或者,您可以避免使用.*,然后使用生成的Pattern.compile而不是Pattern来容纳matches,因为它不会自动锚定matches这样的模式。

答案 1 :(得分:1)

匹配包含4-9和0的内容比匹配不包含4-9和0的内容要容易得多。因此,您应该只编写这样的正则表达式:

[4-90]

并调用find,然后求反:

if (!Pattern.compile("[4-90]").matcher(someString).find()) {
    // ...
}

答案 2 :(得分:0)

另一种选择是使用否定的character class并添加您不想匹配的内容。在这种情况下,您可以添加0,范围为4-9,如果您不想匹配回车符或换行符,也可以添加它们。

^[^04-9\\r\\n]+$

请注意,如果将逗号添加到字符类,则从字面上看就是逗号。

Regex demo | Java demo

String pattern = "^[^04-9\\r\\n]+$";
if(str.matches(pattern)){
    //do something.
}