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

来源:百度文库 编辑:神马文学网 时间:2024/05/16 19:33:40
我用java自带的正则表达式工具去匹配空格的时候,会有不能匹配的情况.
想问一下,空格有多少种?以前换行的\r\n和\r和\n就把我折磨得够呛.
"\s"匹配的是哪一种空格?

  • AWUSOFT
  • (征女友一名(深圳),有意请留言)
  • 等 级:
#1楼 得分:10回复于:2008-05-26 16:04:42 \s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:没有CSDN的日子,我们是如何度过的?
  • anqini
  • ([Kimi]--午後の紅茶)
  • 等 级:
#2楼 得分:10回复于:2008-05-26 16:15:52 \s 空白字符:[ \t\n\x0B\f\r] //这个市重点!

\t 制表符 ('\u0009') 
\n 新行(换行)符 ('\u000A') 
\r 回车符 ('\u000D') 
\f 换页符 ('\u000C') 
\a 报警 (bell) 符 ('\u0007') 
\e 转义符 ('\u001B') 
\cx 对应于 x 的控制符 
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:【征集】如果你是面试官,你最想向面试者了解的内容是什么?
  • shadowlin
  • 等 级:
#3楼 得分:0回复于:2008-05-26 17:02:31 了解了,还想问下[^abc]我要是想让这个是不等与"abc"的话是不是只能用?!,?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐: 【征集】面试第三问,你对钱感兴趣么?
  • jiaping108
  • (冰晶)
  • 等 级:
#4楼 得分:0回复于:2008-05-26 17:16:51 没懂什么意思,汗一个~
引用 3 楼 shadowlin 的回复:
了解了,还想问下[^abc]我要是想让这个是不等与"abc"的话是不是只能用?!,?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:【讨论】java如何登陆163邮箱,获取登陆用户的好友列表
  • shadowlin
  • 等 级:
#5楼 得分:0回复于:2008-05-26 17:33:48 to 楼上:就是匹配不是"abc"的字符串
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
精华推荐:【投票】对于达到一定结贴率的楼主【不】在使用【机器人】提示其结贴信息。现征求大家的意见
  • psyl
  • (Codex)
  • 等 级:
#6楼 得分:0回复于:2008-05-26 17:39:06
引用 2 楼 anqini 的回复:
\s 空白字符:[ \t\n\x0B\f\r] //这个市重点!

\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符




学习了。。 mark
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • anqini
  • ([Kimi]--午後の紅茶)
  • 等 级:
#7楼 得分:10回复于:2008-05-26 17:46:22
引用 3 楼 shadowlin 的回复:
了解了,还想问下[^abc]我要是想让这个是不等与"abc"的话是不是只能用?!,?

String pattern = "(?!abc)haha";
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • shadowlin
  • 等 级:
#8楼 得分:0回复于:2008-05-26 18:08:55 to anqini:
....看来只能用负向零宽断言了.....不过你确定是用"?!"前看的么?我怎么觉得应该是后看的啊?

负向零宽断言似乎在有"."的情况下不太好用..
比如(?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • nihuajie05
  • (陆烨辰)
  • 等 级:
#9楼 得分:0回复于:2008-05-26 19:15:44 ...哎....正则。....想起我学的年代里....
亲娘 啊
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • chendabian
  • (gare)
  • 等 级:
#10楼 得分:0回复于:2008-05-26 23:06:01 mark
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bao110908
  • ()火龙果()
  • 等 级:
  • 3

    4

    5

#11楼 得分:10回复于:2008-05-27 01:50:19 (?!X) 和 (?=X) 表示空隙右边的字符,由于空隙是在字符的前面,因此称为 Lookahead,有个专业名词称为顺序环视。(?=X)称为肯定型的顺序环视,(?!X)称为否定型的顺序环视。

同样 (?<=X) (?
http://www.zhuaxia.com/item/599711080/

正则表达式的结构非常地复杂,上面的链接中有专家写的几个正则表达式,建议去看看。
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bao110908
  • ()火龙果()
  • 等 级:
  • 3

    4

    5

#12楼 得分:0回复于:2008-05-27 01:52:20
引用 9 楼 nihuajie05 的回复:
...哎....正则。....想起我学的年代里....
亲娘 啊


晕死,你学的年代?不就是两个月之前吗?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • zt_soft
  • (Get busy living)
  • 等 级:
#13楼 得分:0回复于:2008-05-27 07:49:05 半角空格:(^\s*)|(\s*$)/g
全角空格:^( )+|^[\s ]+|( )+$|[\s ]+$/g
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • magic256
  • (New PG)
  • 等 级:
#14楼 得分:0回复于:2008-05-27 08:24:13 厄,上面的空格匹配实在看不懂,哪位高人解释下
  • 对我有用[1]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • anqini
  • ([Kimi]--午後の紅茶)
  • 等 级:
#15楼 得分:0回复于:2008-05-27 08:32:13
引用 8 楼 shadowlin 的回复:
to anqini:
....看来只能用负向零宽断言了.....不过你确定是用"?!"前看的么?我怎么觉得应该是后看的啊?

负向零宽断言似乎在有"."的情况下不太好用..
比如(?

这就时候看,前看的话加?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • shadowlin
  • 等 级:
#16楼 得分:0回复于:2008-05-27 09:28:00 我自认我对零宽断言的掌握还是可以的...
不过"?是不是这两个和在一起的时候?比如(?
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • shadowlin
  • 等 级:
#17楼 得分:0回复于:2008-05-27 09:34:51 to 火龙果:
你说的那篇文章不错~还有什么好的关于regexp的文章不?

我这有篇
http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
我觉得还是很不错的.
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • jdlsfl
  • (福林天下)
  • 等 级:
#18楼 得分:0回复于:2008-05-27 09:37:48
引用 2 楼 anqini 的回复:
\s 空白字符:[ \t\n\x0B\f\r] //这个市重点!

\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bao110908
  • ()火龙果()
  • 等 级:
  • 3

    4

    5

#19楼 得分:0回复于:2008-05-27 10:13:26
引用 16 楼 shadowlin 的回复:
我自认我对零宽断言的掌握还是可以的...
不过"? 是不是这两个和在一起的时候? 比如(?


这个跟 .* 没有区别。

.* 以贪婪方式进行最大的匹配,而且在吃掉整个字符串后,开始部分的前面肯定不是 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
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • shadowlin
  • 等 级:
#20楼 得分:0回复于:2008-05-27 12:33:35 to 火龙果:
我似乎有那本书的英文版...看着比较累..我找找实体书看看.
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bhdgx
  • (冰魂)
  • 等 级:
#21楼 得分:0回复于:2008-05-28 07:24:56 进来学学
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • chenhongxin
  • (超级网工(J2EE小鸟版))
  • 等 级:
#22楼 得分:0回复于:2008-05-28 07:59:56 \s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bao110908
  • ()火龙果()
  • 等 级:
  • 3

    4

    5

#23楼 得分:5回复于:2008-05-28 09:42:26 \s 并不能匹配中文全角空格。

\s 只能匹配下面六种字符(详见 java.util.regex.Pattern 的 API DOC):

半角空格( )
水平制表符(\t)
竖直制表符
回车(\r)
换行(\n)
换页符(\f)
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • bao110908
  • ()火龙果()
  • 等 级:
  • 3

    4

    5

#24楼 得分:5回复于:2008-05-28 09:55:21 要同时匹配 \s 以及各种其他的空白字符(包括全角空格等),可以使用:

[\s\p{Zs}]
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • chendabian
  • (gare)
  • 等 级:
#25楼 得分:0回复于:2008-06-02 16:00:38 我有一个很大的疑问 ;
大家帮忙看看 !!
[code=Java][/code]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
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • gulixiong88888888
  • (佳佳)
  • 等 级:
#26楼 得分:0回复于:2008-06-21 09:58:32
引用 1 楼 AWUSOFT 的回复:
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • wargrey
  • (战斗暴龙)
  • 等 级:
#27楼 得分:0回复于:2008-08-21 11:52:32
引用 12 楼 bao110908 的回复:
引用 9 楼 nihuajie05 的回复:
...哎....正则。....想起我学的年代里....
亲娘 啊


晕死,你学的年代?不就是两个月之前吗?


你怎么看出来的
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • kaishiyouxi
  • (刚出炉的包子)
  • 等 级:
#28楼 得分:0回复于:2009-09-07 00:07:33 学习
  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • IT_Peak
  • (IT_Peak)
  • 等 级:
#29楼 得分:0回复于:2010-02-02 16:25:57 谢了