学习《Java正则表达式详解》中举的第一个例子后,一个问题:
本人看完网友发的帖子《一个关于 java 正则表达式的问题》——URL:
http://community.csdn.net/Expert/topic/3506/3506609.xml?temp=.7999079
学习完《Java正则表达式详解》——URL:
http://www.ccw.com.cn/htm/app/aprog/01_7_31_4.asp
有一问题:
在文章中 “3.1 日志文件处理”举的例子当中的正则表达式到底该怎么写
照文章中这样写肯定不会有正确结果的,不行?请看Program:
import java.util.regex.*;
public class RegexTest{
public static void main(String args[]){
Pattern pattern = null;
Matcher matcher = null;
String s1 = "([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})\\s-\\s-\\s[([^\\]]+)\\]";
System.out.println("s1 = "+s1);
String s2 = "172.26.155.241 - - [26/Feb/2001:10:56:03 -0500]\"GET/IsAlive.htm HTTP/1.0\"200 15 ";
System.out.println("s2 = "+s2);
// Match true
pattern = Pattern.compile(s1);
matcher = pattern.matcher(s2);
while (matcher.find()){
System.out.println("matcher.group(0) = "+matcher.group(0));
System.out.println("matcher.group(1) = "+matcher.group(1)); }
}
}
错误:
s1 = ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s-\s-\s[([^\]]+)\]
s2 = 172.26.155.241 - - [26/Feb/2001:10:56:03 -0500]"GET/IsAlive.htm HTTP/1.0"200 15
java.util.regex.PatternSyntaxException: Unclosed character class near index 66
([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s-\s-\s[([^\]]+)\]
^
at java.util.regex.Pattern.error(Pattern.java:1528)
at java.util.regex.Pattern.clazz(Pattern.java:2042)
at java.util.regex.Pattern.sequence(Pattern.java:1585)
at java.util.regex.Pattern.expr(Pattern.java:1545)
at java.util.regex.Pattern.compile(Pattern.java:1279)
at java.util.regex.Pattern.<init>(Pattern.java:1035)
at java.util.regex.Pattern.compile(Pattern.java:779)
at RegexTest.main(RegexTest.java:15)
Exception in thread "main"
Process completed.
按照本文说的正则表达式的写法我认为应该写成这样:
import java.util.regex.*;
public class RegexTest{
public static void main(String args[]){
Pattern pattern = null;
Matcher matcher = null;
String s1 = "([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})\\s-\\s-\\s[([^\]]+)\\]";
System.out.println("s1 = "+s1);
String s2 = "172.26.155.241 - - [26/Feb/2001:10:56:03 -0500]\"GET/IsAlive.htm HTTP/1.0\"200 15 ";
System.out.println("s2 = "+s2);
// Match true
pattern = Pattern.compile(s1);
matcher = pattern.matcher(s2);
while (matcher.find()){
System.out.println("matcher.group(0) = "+matcher.group(0));
System.out.println("matcher.group(1) = "+matcher.group(1)); }
}
}
但是Java编译时不通过,错误:
RegexTest.java:9: illegal escape character
String s1 = "([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})\\s-\\s-\\s[([^\]]+)\\]";
^
1 error
Process completed.
-----------------------------------------------------------------------------------------
高手们你们看看像这样的话,我们遇到这种情况应该这么写?
这里尤其请 网友:
pigo(~_~ ^-^. 。o 0 O O=8526 && 1562=O O 0 o 。. ^-) 进来说说
谢谢楼下的!!