2010-11-16 54 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] 

(包围可能不客气,道歉)