gpt4 book ai didi

java - 如何使用匹配器知道是否有不需要的字符?

转载 作者:行者123 更新时间:2023-11-30 10:35:20 25 4
gpt4 key购买 nike

我有这个问题。

我正在阅读如何创建过滤器以便以后以这种方式在 Java 中的 pattern.match 中使用它们

public Pattern pattern = Pattern.compile("[A-Z]\\d{5,9}|\\d{9}", Pattern.CASE_INSENSITIVE);

我的问题是...

我想将字符串以一个字符(即[A-Z])开头然后接收一些数字和字母数字字符(包括一些& 等特殊字符。 '等等)

问题是我不想允许 & 和 ' 以及所有其他的,我想拒绝一些(允许其他任何东西)。

所以,我想拒绝例如 %* 并且不关心我得到的是 & 还是 ' 在字符串中。

我想首先接受一个字母字符并在所有字符串中拒绝 %, ', * , =

在pattern.match中有没有办法做到这一点?

例子

Asdafsd&2 = true
asdwwe%as = false

问题是我只知道我想否认的几个字符...我的意思是,我必须有 0 个巧合。并且字符串应该少于 15 个字符...

最佳答案

I want to string to start with a character (that is [A-Z]) and later receive some numeric and alpha numeric characters (including some special characters like &. ' and so on)

所以,如果你要选择这条路,你会使用类似的东西

public Pattern pattern = Pattern.compile("[A-Z][\\p{Alnum}&']*", Pattern.CASE_INSENSITIVE);

[A-Z] 匹配一个 ASCII 字母,[\\p{Alnum}&']* 匹配 0+ 个字母数字字符,或者 &,或 '。而且您将不得不添加更多您允许的特殊字符。如果您想允许几乎所有这些特殊字符,该列表可能会变得非常大。

My issue is that instead of allow the & and ' and all others, I want to deny some (allowing anything else).

然后,您可以依赖否定字符类:

Pattern.compile("[A-Z][^%*]*", Pattern.CASE_INSENSITIVE)
^^^^^^

如果您需要匹配以 ASCII 字母 ([A-Z]) 开头,然后具有除 % 之外的零个或多个字符的字符串* ([^%*]*)。

查看更多关于 Negated Character Classes here 的信息.

查看此 Java demo :

String pat = "(?i)[A-Z][^%'*=]{0,13}";
System.out.println("Asdafsd&".matches(pat)); // = true
System.out.println("asdwwe%as".matches(pat)); // = false

这里,

  • (?i) - 不区分大小写的修饰符
  • [A-Z] - ASCII 字母
  • [^%'*=]{0,13} - 除 %' 之外的字符出现 0 到 13 次, *=

由于 String#matches 需要完整的字符串匹配 ^/\A$/\z anchor 不是必需的。

关于java - 如何使用匹配器知道是否有不需要的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41231808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com