Java 正则表达式 - 不能以斜杠或空格开始或结束,并且没有连续的斜杠

Posted

技术标签:

【中文标题】Java 正则表达式 - 不能以斜杠或空格开始或结束,并且没有连续的斜杠【英文标题】:Java regex - can't start or end with slash or space, and no consecutive slashes 【发布时间】:2016-11-18 15:39:09 【问题描述】:

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

可以包含字母数字字符、空格和斜杠 不能以空格或斜线开头或结尾 不能包含连续的斜杠 长度可以在 2 到 20 个字符之间

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

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

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

【问题讨论】:

【参考方案1】:

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

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

见regex demo

由于(?!,前瞻(?!.*//) 是negative,并且一旦在除换行符(.*) 之外的任何0+ 个字符之后找到任何//,则匹配失败。

你可以在没有^$ 的情况下使用它和String#matches(参见demo):

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!");    

String#matches 需要完整的字符串匹配,但为了清楚起见,我会保持明确的锚点。

【讨论】:

以上是关于Java 正则表达式 - 不能以斜杠或空格开始或结束,并且没有连续的斜杠的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式[!^0-9] 是啥意思?

java 正则表达式 前4位必须全部是字母,怎么写?

java正则表达式添加斜杠

js正则表达式替换空格

js正则表达式替换空格(转)

java 和 JS(javaScript)中的反斜杠正则转义