我正在尝试使用以下条件构建Java正则表达式:
标识符不能以特殊字符开头或结尾
不允许包含多个特殊字符的序列
允许的特殊字符为:冒号,连字符(减号),句号(句号)和下划线
我做了一些分析,并建立了正则表达式:
String regularexp="^[A-Za-z0-9](?:,/-/_.*?[^A-Za-z0-9]{2}).*?[A-Za-z0-9]$" ;
但以某种方式它不起作用。
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
你能检查我在哪里做错了吗。
如果您专注于非特殊字符的部分,则编写起来会更容易。然后,该字符串如下所示(以EBNF表示法):
<word> (<special-char> <word>)*
<word>
是一个或多个字母数字字符的序列:[A-Za-z0-9]+
。<word>
不为空,我们保证不会<special-char>
出现一个以上的序列。<special-char>
也正是一个特殊字符:[-:._]
。-
放在第一位,所以我们不必逃避它。把它放在一起:
^[A-Za-z0-9]+([-:._][A-Za-z0-9]+)*$
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句