Java 如何使用匹配器来确定是否存在非通缉角色?

Java 如何使用匹配器来确定是否存在非通缉角色?,java,regex,Java,Regex,我有这个问题 我正在阅读如何创建过滤器,以便以后在java中以模式使用它们 public Pattern pattern = Pattern.compile("[A-Z]\\d{5,9}|\\d{9}", Pattern.CASE_INSENSITIVE); 我的问题是 我希望字符串以字符(即[a-Z])开头,然后接收一些数字和字母数字字符(包括一些字符) 特殊字符,如“&.”等) 问题是,我不允许&和’和所有其他的,而是想否定一些(允许任何其他的) 例如,我想拒绝%和*,不在乎字符串中是否有

我有这个问题

我正在阅读如何创建过滤器,以便以后在java中以
模式使用它们

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

我希望字符串以字符(即
[a-Z])
开头,然后接收一些数字和字母数字字符(包括一些字符) 特殊字符,如“&.”等)

问题是,我不允许&和’和所有其他的,而是想否定一些(允许任何其他的)

例如,我想拒绝
%
*
,不在乎字符串中是否有
&
'

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

有没有办法在模式匹配中实现这一点

范例

Asdafsd&2 = true
asdwwe%as = false
问题是我只知道我想否认的几个角色。。。我的意思是,我肯定没有巧合。字符串应该少于15个字符

我希望字符串以一个字符(即[a-Z])开始,然后接收一些数字和字母数字字符(包括一些特殊字符,如&.'等)

所以,如果你要选择这条路,你会使用

public Pattern pattern = Pattern.compile("[A-Z][\\p{Alnum}&']*", Pattern.CASE_INSENSITIVE);
其中,
[A-Z]
匹配ASCII字母,
[\\p{Alnum}&']*
将匹配0+个字母数字字符,或
&
'
。你必须添加更多你允许的特殊字符。如果您想允许几乎所有这些特殊字符,列表可能会变得非常大

我的问题是,我不想允许&and'和所有其他,而是想否定一些(允许任何其他)

然后,您可以使用否定字符类:

如果需要匹配以ASCII字母(
[a-Z]
)开头,然后除
%
*
[^%*]*
)以外的字符为零或更多的字符串

了解更多关于

见此:

这里,

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

由于
String#matches
需要一个完整的字符串匹配,因此
^
/
\a
$
/
\z
锚定是不必要的。

听起来不清楚,但请尝试
模式。编译([a-z][^%*]*”,模式不区分大小写)
如果您需要匹配一个以ASCII字母开头的字符串,并且该字符串除了
%
*
之外,还有零个或多个字符。您能更具体地说明您的正则表达式应该匹配什么吗?一些匹配和不匹配的示例输入字符串将非常有用。“等等”特别不清楚。谢谢你的评论,我已经更新了这个问题,请看一看以澄清,如果代码片段中不清楚的话:是插入符号(^)否定了类。谢谢@Wiktor,实际上我想要%的零值,',*,=,这可能吗?零值是什么意思?匹配除
%
'
*
=
以外的任何字符?使用
[^%'*=]
。注意量词:
*
匹配零次或多次出现,
+
匹配1次或多次出现。我想知道,如果有任何%,',*,=返回false,当匹配器匹配零次或多次出现时,是真的,不是吗?但是你说第一个字符必须是字母。如果匹配第一个字母,则其余字母可以为空。正如我所说,如果您需要匹配至少1个字符,请使用
+
量词。
Pattern.compile("[A-Z][^%*]*", Pattern.CASE_INSENSITIVE)
                      ^^^^^^
String pat = "(?i)[A-Z][^%'*=]{0,13}";
System.out.println("Asdafsd&".matches(pat)); // = true
System.out.println("asdwwe%as".matches(pat)); // = false