2010-11-16 57 views
0

我正在使用正則表達式在Java中尋找匹配此"[email protected]@Po6"和另一個"[email protected]@Port-channel7"表達式的模式。使用正則表達式在java中匹配模式

就像我們有\ d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3}來進行IP地址驗證。

我們可以有如下圖案嗎?請建議 -

[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}@Po\d[1-9] 
[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]@\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}@Port-channel\d[1-9] 

在此先感謝。

==============================

在我的節目,我有,

import java.util.regex.*; 
class ptternmatch { 
    public static void main(String [] args) { 
     Pattern p = Pattern.compile("\\w\\w\\[email protected]\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}@*"); 
     Matcher m = p.matcher("[email protected]@Port-channel7"); 
     boolean b = false; 
     System.out.println("Pattern is " + m.pattern()); 
     while(b = m.find()) { 
      System.out.println(m.start() + " " + m.group()); 
    } 
    } 
} 

但是我收到編譯錯誤的模式。 - >無效的轉義序列 該序列將像一個 - >數字n字母@ ipaddress @一些文本的3個字符的字..

+0

什麼是真正的問題?哪些部分的示例在匹配時遇到問題?哪些部分是可變的,哪些部分在預期數據中是靜態的? – Ophidian 2010-11-16 14:15:59

回答

0

你可以做類似matcher.find(),如果它是真的,那麼這些組將捕獲這些信息。看看這裏一個教程:

你會需要包裝所需的零件詮釋括號 - 例如(\d{1,3})。如果你包裝所有4個,你將有4個組訪問。

而且,看看這個教程

這是一個非常好的教程,我覺得這個可以解釋大部分的問題。

要匹配你的字符串的第二個:

  • LA5 @ 10.232.140.133 @港channel7

您可以使用類似:

\w{2}\[email protected]\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}@[a-zA-Z\-]+\d 

這取決於什麼你想要做的,所以正則表達式可能會改變。

+0

我想,他正在尋找確切的Java regExp模式來查找這些示例字符串。 – 2010-11-16 14:08:21

+0

@Andreas_D我第一次誤解了它......謝謝! – 2010-11-16 14:16:33

1

那麼,如果你想驗證IP地址,那麼你需要一些比\d{1,3}多一點涉及的東西。另外,請記住,對於Java字符串文字,您需要使用\\轉義\,因此最終會在實際正則表達式中使用單個反斜槓來轉義字符,如句點(.)。

假設[email protected]位是靜態的,你是罰款或者PoPort-channel隨後在年底有一個數字,那麼你可能需要沿着這些路線正則表達式:

[email protected](((2((5[0-5])|([0-4][0-9])))|(1[0-9]{2})|([1-9][0-9]?)\\.){3}(2(5[0-5]|[0-4][0-9]))|(1[0-9]{2})|([1-9][0-9]?)@Po(rt-channel)?[1-9] 

(包圍可能不客氣,道歉)