2016-02-26 198 views
0

我需要一个正则表达式来出现0到7个字母或0到7个数字。正则表达式或OR两个范围正则表达式

例如:匹配:1234asdbs

不匹配:123456789absbsafsfsfasf12

我试过([a-zA-Z]{0,7})|([0-9]{0,7}),但这不起作用。 我哪里错了?

+1

你能展示他们可能在文件/变量中看到什么样的匹配吗?否则,很难知道你在做什么错误 –

+0

“{0,7}”的缺省情况,喜欢使用“{1,7}”? – Rao

回答

1

像这样的东西应该这样做:^([a-zA-Z]{0,7}|[0-9]{0,7})$

+0

我没有使用字符串的开始和字符串结束标签,也混乱了分组。 – Ravindra

0

你可以试试这个Regex

String regex = "\\p{Alnum}{0,7}"; 

正则表达式\p{Alnum}包括所有的字母和数字。

+0

几个问题:(1)'\ p {Alpha}'只匹配字母;你正在考虑'\ p {Alnum}'。 (2)您需要转义Java字符串文字的反斜线。 (3)“{0,7}”中不应有空格。 (4)无论如何,这将不起作用,因为OP要求所有字母**或**全部数字,而不是混合物。 –

+0

哦,哦对不起!我已更新,是的,你是对的。谢谢!顺便提一下,问题2和问题3不是问题,因为Intellij IDE会自动添加和删除某些内容,但是您是对的。如果你使用Intellij,你会知道在复制和粘贴时会发生什么...... –

+0

是的,这不会工作,因为我需要所有数字或所有字母。 – Ravindra

1

您正在使用或错误。该结构是(match1|match2),但你现在有(match1)|(match2)你的正则表达式应该是:([a-zA-Z]{0,7}|[0-9]{0,7})

0

您可以使用模式\b([a-zA-Z]{1,7}|[1-9]{1,7})\b匹配:

public static void main(String[] args) { 

     String input = "- 1234, asdbs 123456789, absbsafsfsf, asf12"; 
     Pattern pattern = Pattern.compile("\\b([a-zA-Z]{1,7}|[1-9]{1,7})\\b"); 
     Matcher matcher = pattern.matcher(input); 
     List<String> listMatches = new ArrayList<String>(); 

    while(matcher.find()) 
    { 
     listMatches.add(matcher.group(1)); 
    } 

    for(String s : listMatches) 
    { 
     System.out.println(s); 
    } 
} 

输出:

1234 
asdbs