关于正则表达式空格的问题.

羡慕的代码我测试过了,问题出在\s-\s-\s上,但是不知道为什么错啦....求指教!
[code="java"]
private String testStr = "58.61.164.141 – - [22/Feb/2010:09:51:46 +0800] “GET / HTTP/1.1″ 206 6326 ” ";
private String regex="([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s-\s-\s\[([^\]]+)\]";[/code]

[quote]
58.61.164.141 – - [22/Feb/2010:09:51:46 +0800] “GET / HTTP/1.1″ 206 6326 ”
[/quote]

你看到你给出的字符串么??中间那个“——”,有长有短,你看看“GET”前面的引号,那是中文的引号

你把所有的中文字符去掉,然后换成英文字符试试,下面是我把你的testStr改了以后的测试

[code="java"]
String testStr = "58.61.164.141 - - [22/Feb/2010:09:51:46 +0800] \"GET / HTTP/1.1\" 206 6326";
String regex = "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s-\s-\s\[([^\]]+)\]";

    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(testStr);

    if(matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }

[/code]

我觉得你要group把

\s-\s-\s
换成\s\-\s\-\s

后面的[([^\]]+)\]

你想group什么出来??

22/Feb/2010:09:51:46 +0800 哪个部分?还是[22/Feb/2010:09:51:46 +0800]

不太懂,你问的是什么意思 ~~~要匹配一个什么样格式的

可以简单的用StringUtils.substringBetween(testStr, "[", "]")
也可以用正则
[code="java"]
String testStr = "58.61.164.141 - - [22/Feb/2010:09:51:46 +0800] \"GET / HTTP/1.1″ 206 6326 \" ";
String regex="([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\s-\s-\s\[(.*)].*";
Pattern p=Pattern.compile(regex);

Matcher m=p.matcher(testStr);

if(m.matches())
System.out.println(m.group(2));
[/code]