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