我正在处理一个字符串。用例是我不希望使用具有4到9或0的任何数字的字符串。
示例:-
std::unordered_set::find
我尝试过以下模式,但没有成功。
g++
答案 0 :(得分:2)
首先,从字符类中删除逗号。您不是在寻找逗号。
由于您不允许,请勿锚定表达式,而应在字符串中的任意位置进行匹配。实际上,matches
为您锚定了表达式,因此我们必须在不允许的字符类之前和之后有意地允许字符:
String pattern = ".*[04-9].*";
if(str.matches(pattern)){
// disallow
}
或者,您可以避免使用.*
,然后使用生成的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]+$
请注意,如果将逗号添加到字符类,则从字面上看就是逗号。
String pattern = "^[^04-9\\r\\n]+$";
if(str.matches(pattern)){
//do something.
}