正则表达式,只允许单词之间的单个分隔符

时间:2014-09-21 06:53:16

标签: java regex

我需要构造一个正则表达式,使其在开头或结尾不允许/,并且序列中不应有多个/

Valid Expression is: AB/CD
Valid Expression   :AB
Invalid Expression:  //AB//CD//
Invalid Expression:  ///////
Invalid Expression:  AB////////

/字符只是两个单词之间的分隔符。它的长度不应超过单词之间的一个。

3 个答案:

答案 0 :(得分:0)

[a-zA-Z]+(/[a-zA-Z]+)+

匹配

a/b
a/b/c
aa/vv/cc

不匹配
a
/a/b
a//b
a/b/

演示

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Reg {
    public static void main(String[] args) {
    Pattern pattern = Pattern.compile("[a-zA-Z]+(/[a-zA-Z]+)+");
    Matcher matcher = pattern.matcher("a/b/c");
    System.out.println(matcher.matches());
    }
}

答案 1 :(得分:0)

这个正则表达式做到了:

^(?!/)(?!.*//).*[^/]$

所以在java:

if (str.matches("(?!/)(?!.*//).*[^/]"))

请注意matches()隐含^和$,因为匹配必须与整个字符串匹配才为真。

答案 2 :(得分:0)

假设您只想在斜杠之间允许使用字母数字(包括下划线),那么它非常简单:

boolean foundMatch = subject.matches("\\w+(?:/\\w+)*");

<强>解释

\w+  # Match one or more alnum characters
(?:  # Start a non-capturing group
 /   # Match a single slash
 \w+ # Match one or more alnum characters
)*   # Match that group any number of times