2016-02-26 440 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