2017-01-23 42 views
0

我想要形成正則表達式來驗證字符串模式「part1 atmost-2-words part2」。 part1和part2是固定的字符串,在它之間可以包含任何字母但最多3個空格。要測試的Java正則表達式包含任何字母,但字符串之間只有3個空格

實施例:第1部分=這是,第2部分=錯誤

這是間歇系統錯誤 - 有效

這是一種間歇式的系統錯誤 - 無效

這是錯誤 - 有效

我必須單獨使用正則表達式來完成此操作。這是否可以使用正則表達式來完成?

+4

是的,但你在哪裏卡住了?請分享您嘗試過的模式,並解釋不起作用的模式。 –

+0

根據帖子的內容 - 你是不是指四個空格(至少要使字符串有效或無效..)?你可能想使用類似於這個正則表達式:'^ [\ w] +(\ s [\ w] +){0,4} $'它會驗證任何字符串中最多可以存在四個空格 - 應該驗證你的要求.. – vegaasen

+0

我想形成一個像「這是[\\ w * \\ s {0,3}]錯誤」的模式。這是傳遞給現有的實用程序,驗證給定模式的字符串,並根據結果採取行動 – sanjeev

回答

0

由你的聲明去,下面的正則表達式會做的工作

This is(\w+\s*\w*)? error 

由於This iserror固定在兩者之間atmost 2種模式。這應該很好。

試圖與regex101和工作正常,檢查出來https://regex101.com/r/mQ0uEM/1

+1

謝謝你的工作。我稍微修改了它,如下所示,以匹配我所有的情況(。*?這是(\\ s ?? \ w *){0,4}錯誤){1}?。*? – sanjeev

0

代碼:

static String P1 = "This is"; 
    static String P2 = "error"; 
    static Pattern p = Pattern.compile(P1 + "\\W+(\\w+\\W+){0,2}" + P2); 

    static void test(String sentence) { 
     final Matcher m = p.matcher(sentence); 
     if(m.matches()) { 
     System.out.printf("%s - Valid\n", sentence); 
     } 
     else { 
     System.out.printf("%s - Invalid\n", sentence); 
     } 
    } 

    public static void main(String[] args) { 
     test("This is intermittent system error"); 
     test("This is a intermittent system error"); 
     test("This is error"); 
    } 

輸出:

This is intermittent system error - Valid 
This is a intermittent system error - Invalid 
This is error - Valid 

說明:

  • \ w +是一個非單詞字符:[^ \ w],一個或多個
  • \ w +是一個單詞字符:[a-zA-Z_0-9],一個或多個
  • {0,2}無,一個或兩個,

The reference

相關問題