我用java自带的正则表达式工具去匹配空格的时候,会有不能匹配的情况.
想问一下,空格有多少种?以前换行的\r\n和\r和\n就把我折磨得够呛.
"\s"匹配的是哪一种空格?

解决方案 »

  1.   

    \s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
      

  2.   

    \s 空白字符:[ \t\n\x0B\f\r] //这个市重点!\t 制表符 ('\u0009') 
    \n 新行(换行)符 ('\u000A') 
    \r 回车符 ('\u000D') 
    \f 换页符 ('\u000C') 
    \a 报警 (bell) 符 ('\u0007') 
    \e 转义符 ('\u001B') 
    \cx 对应于 x 的控制符 
      

  3.   

    了解了,还想问下[^abc]我要是想让这个是不等与"abc"的话是不是只能用?!,?<!了?
      

  4.   

    to 楼上:就是匹配不是"abc"的字符串
      

  5.   

    String pattern = "(?!abc)haha";
      

  6.   

    to anqini:
    ....看来只能用负向零宽断言了.....不过你确定是用"?!"前看的么?我怎么觉得应该是后看的啊?负向零宽断言似乎在有"."的情况下不太好用..
    比如(?<!abc).*似乎和没加一样,有人知道是为什么么?
      

  7.   

    (?!X) 和 (?=X) 表示空隙右边的字符,由于空隙是在字符的前面,因此称为 Lookahead,有个专业名词称为顺序环视。(?=X)称为肯定型的顺序环视,(?!X)称为否定型的顺序环视。同样 (?<=X) (?<!X) Lookbehind 统称为逆序环视http://www.zhuaxia.com/item/599711080/正则表达式的结构非常地复杂,上面的链接中有专家写的几个正则表达式,建议去看看。
      

  8.   

    半角空格:(^\s*)|(\s*$)/g
    全角空格:^( )+|^[\s ]+|( )+$|[\s ]+$/g
      

  9.   

    我自认我对零宽断言的掌握还是可以的...
    不过"?<!"和"."组合的时候确实有点弄不懂.
    是不是这两个和在一起的时候?<!就起不到作用了.
    比如(?<!abc).*可以匹配到什么样的?为什么?
      

  10.   

    to 火龙果:
    你说的那篇文章不错~还有什么好的关于regexp的文章不?我这有篇
    http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
    我觉得还是很不错的.
      

  11.   


    这个跟 .* 没有区别。.* 以贪婪方式进行最大的匹配,而且在吃掉整个字符串后,开始部分的前面肯定不是 abc 了(前面是空)。
    因此,(?<!abc).* 与 .* 没有区别。但是 (?<=abc).* 这样就有区别了,例如字符串是 abc123456 那这个表达式就能匹配 123456 了。
    看看它是如何进行匹配的。1,先对 (?<=abc) 进行处理,由于 (?<=abc) 匹配的是零宽度,因此从左边一个一个地走过去,直到
          走到字母 c 的后面,OK,这时与 (?<=abc) 进行匹配了。
    2,再对 .* 进行处理,从字母 c 的后面开始,由于 .* 能匹配几乎所有的字符。因此,表达式匹配完成,
          匹配的结果就是 123456 了。PS:那篇文章不错,不过有些语法在 Java 中不能使用,比如:内嵌注释、命名捕获、递归匹配等,
    使用的时候注意一下。哈哈,我上面贴的那个链接,是人家看《精通正则表达式》这本书的读书笔记。说到这,
    要顺便提一下这本书,这本书可谓是正则表达式的登峰之作了,已经没有人再敢涉及了。 这本书中文版在这里有一章的试读下载:http://www.oreilly.com.cn/book.php?bn=978-7-121-04684-1另外这个站点上有详细的正则表达式教程,可惜是英文的 http://www.regular-expressions.info这个上面有好多现成的表达式 http://regexlib.com
      

  12.   

    to 火龙果:
    我似乎有那本书的英文版...看着比较累..我找找实体书看看.
    ?<!那个我是以为和?<=用法一样,有点想当然了.
      

  13.   

    \s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
      

  14.   

    \s 并不能匹配中文全角空格。\s 只能匹配下面六种字符(详见 java.util.regex.Pattern 的 API DOC):半角空格( )
    水平制表符(\t)
    竖直制表符
    回车(\r)
    换行(\n)
    换页符(\f)
      

  15.   

    要同时匹配 \s 以及各种其他的空白字符(包括全角空格等),可以使用:[\s\p{Zs}]
      

  16.   

    我有一个很大的疑问 ;
    大家帮忙看看 !!
    public static void main(String[] args) {
            Pattern p = Pattern.compile("\\b[a-zA-Z]+?\\b");
            String s = "aaa bbb jj2rjo jjj 2ii oo8d 7haohsie";
            Matcher m = p.matcher(s);
            while (m.find()) {
                p(m.group());
            }
        }找到了aaa bbb jjj 我想问的是开头的aaa  哪来的\\b[a-zA-Z]+?\\b 如果有结尾有也一样\\b[a-zA-Z]+?\\b