1
xinhugo 2014-06-18 23:38:56 +08:00
抱歉,没明白你写的内容,不知道是你表达得不够清楚,还是我的理解能力有待提高啦。
唯有建议你使用正则表达式测试工具,逐个字符测试一下,也许你就能明白了。 正则表达式在线测试: http://tool.chinaz.com/regex/ |
2
2code 2014-06-18 23:41:52 +08:00
分组
|
3
xcatliu 2014-06-18 23:44:05 +08:00 1
第一个问题,用 reg.exec 去匹配的时候,会返回一个数组,第一项是全部匹配的结果,后面依次是捕获组的结果,此例中就是括号中的匹配结果:(#{1,6}),([^\n]+?),最后一个括号是 ?: 开头,所以是非捕获组,不会捕获
第二个问题,字符串开始,接任意个空格,接1~6个#,接任意空格,接1或更多个非\n字符,接任意空格,接任意多#,接任意多空格,然后后面必须是0或1个\n或一个行结束符 |
4
xcatliu 2014-06-18 23:45:42 +08:00
记得有个在线输入正则表达式,会生成一个流程图的网站,忘记收藏了。。。谁知道吗?
|
5
Archangel_SDY 2014-06-18 23:45:46 +08:00 1
'##', 'hello' 是分组匹配出来的吧,后面的 (?:\n+|$) 表示匹配1个以上的 \n 或 $ 但不进入分组.
参考: http://deerchao.net/tutorials/regex/regex.htm#grouping http://deerchao.net/tutorials/regex/regex.htm#backreference |
6
Archangel_SDY 2014-06-18 23:47:21 +08:00 1
|
7
xcatliu 2014-06-18 23:49:00 +08:00
@Archangel_SDY 感谢!就是这个
|
8
freefcw 2014-06-18 23:51:31 +08:00 1
建议楼主去了解一下正则的分组,对于()内的会标记为一个分组
也就是说这个正则匹配的结果将如此解释 ##hello 为完整的结果 (#{1,6}) 是第一个分组,匹配1到6个#,也就是## ([^\n]+?) 是第二个分组,匹配一个到多个非\n,?表示此为非贪婪的,匹配到第一个就结束了,也就是hello (?:)表示的是非匹配捕获,(?:\n+|$) 的意思应该是匹配任意多个回车或者到结束 |
9
xieguanglei OP @xcatliu 明白了,多谢!
|
10
xieguanglei OP @freefcw 哈,明白了,多谢!
|