1
veelog 2017-01-19 23:02:14 +08:00 via Android
比如(?:a|b|c|)
|
2
veelog 2017-01-19 23:02:36 +08:00 via Android
比如(?:a|b|c|d)
|
3
veelog 2017-01-19 23:03:25 +08:00 via Android 1
比如(?:a111|b222|c333)
|
4
zhanglintc OP @veelog 我, 好像有点明白了. 这还顺便解决了我之前不知道怎么写正则或的疑问...
|
5
xuchkang171 2017-01-20 00:05:03 +08:00 1
场景一例:正则式很长,多次用到括号,但并非所有使用括号的部分都是你希望最终提取出来的信息,很多括号的内容只是为了使匹配成功而不得不用,这时候用 ?: 可以将这些只想匹配不想最终提取出来的括号从结果中去掉,以使结果中只有你关注的信息。
|
6
Biwood 2017-01-20 00:34:02 +08:00 1
(x) 和 (?:x) 的基础功能是用来分组匹配,前者会分配组号,后者没有。所以(?:exp)的作用有两点:
1. 节约性能,毕竟分配组号会耗费 CPU 资源。 2. 不参与组号分配,因为组号分配是按照从左往右的顺序分配的,也许中间某些组并不需要被分配组号,那就可以用(?:x)。 |
7
zhanglintc OP @xuchkang171 "很多括号的内容只是为了使匹配成功而不得不用", 怎么会有这种情况呢? 不用括号就匹配不到吗? 是不是主要就是楼上提到的那种写"或"的情况?
|
8
irenicus 2017-01-20 11:38:29 +08:00 1
@zhanglintc 对的,就是你想的这样。括号一般就两个用途,“或”以及“捕获”,不做捕获用的那就只是做或了
|