正则表达式,仅在字符串有值时验证?

时间:2014-01-09 06:52:20

标签: regex

我想要一个正则表达式,它只会验证字符串是否有值。

我想出了这种模式:

pattern: '^$|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)'

逻辑是^ $ - 应匹配空字符串和|是OR。

所以在英文中是空字符串或其余的模式。

如果字符串为空,则表示正则表达式应该匹配时返回true,但事实并非如此。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

请尝试以下操作:

^(?:.*([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?).*)?$

答案 1 :(得分:0)

这取决于您使用的语言。 \A匹配字符串的开头,\Z匹配字符串的结尾。

(\A\Z)|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)

简短Java示例

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

public class HelloWorld{

     public static void main(String []args){
        Pattern pattern = Pattern.compile("(\\A\\Z)|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)");
        String str1 = "";
        String str2 = "s";
        String str3 = "abcdababab3";
        Matcher matcher = pattern.matcher(str1);
        if(matcher.find()){
                System.out.println("True:" + matcher.group());

        }
        matcher = pattern.matcher(str2);
        if(matcher.find()){
                System.out.println("True:" + matcher.group());

        }
        matcher = pattern.matcher(str3);
        if(matcher.find()){
                System.out.println("True:" + matcher.group());

        }
     }
}

输出:

True:
True:abcdababab3

它匹配空字符串和abcdabab3,但不匹配s