2014-03-12 29 views
1

我想創造一個適當的正則表達式來驗證一些價值觀,我會解釋下:正則表達式「間」文本

我跟他來驗證這行:

$_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System 
$_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System 
$_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System 

這一行:

$_globalVariables/ns:GlobalVariables/[varname]/ESB/Sistema 

我嘗試了一些組合,並閱讀有關正則表達式,但我在這個主題「新手」,我不能得到正確的結果。

我認爲這是一些這樣的:

\$_globalVariables/ns:GlobalVariables/(.*?)/ESB/System 
  • \$_globalVariables/ns:GlobalVariables/ - >文本在開始驗證
  • (.*?) - >任何
  • /ESB/System - >結束的數學文本

對不起,我的英語,如果有人需要更多的信息,請問我。

+0

請不要更新你的問題,使得無效別人的答案...... – OGHaza

回答

3

您必須轉義$字符,因爲它是一個保留字符,意思是根據上下文的行尾輸入。

方法如下:

Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System 
with variable name: VARIABLENAME 
Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System 
    with variable name: VARIABLENAME2 
Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System 
    with variable name: VARIABLENAME3 

注意

  • $

    String[] input = { 
          "$_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System", 
          "$_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System", 
          "$_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System" }; 
    Pattern p = Pattern.compile("^\\$_globalVariables/ns:GlobalVariables/(.+?)/ESB/System"); 
    for (String s: input) { 
        Matcher m = p.matcher(s); 
        if (m.find()) { 
         System.out.println("Found: " + m.group()); 
         System.out.println("\t with variable name: " + m.group(1)); 
        } 
    } 
    

    輸出是雙重逸出的Pattern - >\\$

  • 使用1+不願意量詞,而不是0+不願意量詞組1:我們假定在變量名至少一個字符,對不對?
  • 的Java Pattern頁面API here
+0

注意....問題是你-.- – OGHaza

+1

@OGHaza uugh改變。謝謝!雖然它看起來像我的答案仍然是有效的我猜...(注意:更改答案以反映組捕獲) – Mena

+0

我看到你的答案,但我之前添加了風景:)無論如何,對我來說最困難的是「 (。+?)「:)謝謝,我現在標記答案。 如果可能,當字符串包含[文本]時通用[名稱]? (字符串的其餘部分可以更改) – Genaut