Java正则表达式-can';t以斜杠或空格开头或结尾,并且没有连续的斜杠

Java正则表达式-can';t以斜杠或空格开头或结尾,并且没有连续的斜杠,java,regex,Java,Regex,我需要符合以下要求的正则表达式: 可以包含字母数字字符、空格和斜杠 不能以空格或斜杠开始或结束 不能包含连续的斜杠 长度可以在2到20个字符之间 到目前为止,我有以下几点: ^[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$ 我认为它涵盖了除连续斜杠之外的所有内容。在Java正则表达式中是否有满足此要求的方法?您可以在开头使用前瞻添加该条件: ^(?!.*//)[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$ ^^^

我需要符合以下要求的正则表达式:

  • 可以包含字母数字字符、空格和斜杠
  • 不能以空格或斜杠开始或结束
  • 不能包含连续的斜杠
  • 长度可以在2到20个字符之间
到目前为止,我有以下几点:

^[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$

我认为它涵盖了除连续斜杠之外的所有内容。在Java正则表达式中是否有满足此要求的方法?

您可以在开头使用前瞻添加该条件:

^(?!.*//)[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$
 ^^^^^^^^

前瞻
(?!*//)
是由于
(?!
而导致的,并且一旦在除换行符(
*
)以外的任何0+字符后找到任何
/
,匹配就会失败

您可以不使用
^
而使用
$
字符串#匹配的
(请参阅):

因为
String#matches
需要一个完整的字符串匹配,但是为了清晰起见,我会保持锚点的明确性

String input = "abc //abc";
if (!input.matches("(?!.*//)[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]")) { 
        System.out.println("Not matching!");    
}