Java正则表达式 - 无法以斜杠或空格开头或结尾,也没有连续的斜杠

Nik*_*dun 2 java regex

我需要一个具有以下要求的正则表达式:

  • 可以包含字母数字字符,空格和斜杠
  • 无法以空格或斜线开始或结束
  • 不能包含连续斜杠
  • 长度可以在2到20个字符之间

到目前为止,我有以下内容:

^[A-Za-z0-9][A-Za-z0-9/ ]{0,18}[A-Za-z0-9]$
Run Code Online (Sandbox Code Playgroud)

我认为它涵盖了除连续斜线之外的所有内容.有没有办法在Java正则表达式中满足此要求?

Wik*_*żew 5

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

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

请参阅正则表达式演示

前瞻(?!.*//)负面的,因为(?!匹配失败,一旦它找到//除了换行符之外的任何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!");    
}
Run Code Online (Sandbox Code Playgroud)

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