子串或完全匹配的正则表达式

时间:2015-03-31 15:39:00

标签: java regex string

给定示例字符串" hello",我需要一个表达式来验证用户输入(现有字母的任意组合;不重复用过的字母)。

在此上下文中,有效和无效的输入示例如下:

有效:"你好","地狱"," lol" ......等等。

无效:" heel"," loo" ...等。

我尝试过...... ...

(.)*([hello])(.)*

[hello]+

但是,他们不会对无效的那些进行排序。

任何帮助将不胜感激,谢谢。

注意:这不仅仅是子字符串或完全匹配,根据示例,字母组合有效。

1 个答案:

答案 0 :(得分:0)

正则表达式不是正确的工具......它们应该用于从左到右匹配,而不是以随机顺序计算各种字符。你最好有一个验证字符串hello,循环输入字符串中的每个字符,并检查字符是否存在(如果存在,从验证字符串中删除该字符并继续。否则,输入失败)。

这是quick example I whipped up in Java

public static boolean testString(String testString)
{
    String allowedCharacters = "hello";

    for(int i = 0; i < testString.length(); i++) {
        int position = allowedCharacters.indexOf(testString.charAt(i));

        if(position == -1) {
            System.out.println(testString + " - fail");
            return false;
        } else {
            allowedCharacters = allowedCharacters.substring(0, position)
                              + allowedCharacters.substring(position + 1);
        }
    }


    System.out.println(testString + " - success");
    return true;
}

使用示例输出调用该函数:

testString("hello"); // hello - success
testString("hell");  // hell - success
testString("lol");   // lol - success

testString("heel");  // heel - fail
testString("loo");   // loo - fail