- 浏览: 415846 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
针对Java API文档中的正则表达式关于特殊构造(非捕获组)的说明,例如:
1.(?:X) X, as a non-capturing group
2.(?idmsux-idmsux) Nothing, but turns match flags on - off
3.(?idmsux-idmsux:X) X, as a non-capturing group with the given flags on - off
4.(?=X) X, via zero-width positive lookahead
5.(?!X) X, via zero-width negative lookahead
6.(?<=X) X, via zero-width positive lookbehind
7.(?<!X) X, via zero-width negative lookbehind
8.(?>X) X, as an independent, non-capturing group
1.(?:X) X,作为非捕获组
2.(?idmsux-idmsux) Nothing,但是将匹配标志由 on 转为 off
3.(?idmsux-idmsux:X) X,作为带有给定标志 on - off 的非捕获组
4.(?=X) X,通过零宽度的正 lookahead
5.(?!X) X,通过零宽度的负 lookahead
6.(?<=X) X,通过零宽度的正 lookbehind
7.(?<!X) X,通过零宽度的负 lookbehind
8.(?>X) X,作为独立的非捕获组
现在主要是针对以上8个Regular Expression的Meta Data进行研究:
我们都知道以(?开头,)结尾的都称之为非捕获组,在匹配完成后在内存中不保留匹配到的字符。
1、(?:X) X,作为非捕获组
与捕获组 ( ) 的意思一样也是将其作为一组进行处理,与捕获组的区别在于不捕获匹配的文本,
仅仅作为分组。
比如:要匹配 123123 这个,就可以写为 (123)\1 使用反向引用,这时只能用捕获组,在匹配
123 后会保留在内存中,便于反向引用,而 (?:123) 在匹配完后则不会保留,区别仅在于此。
2、(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
用于标志匹配,比如:表达式 (?i)abc(?-i)def 这时,(?i) 打开不区分大小写开关,abc 匹配
不区分大小地进行匹配,(?-i) 关闭标志,恢复不区分大小写,这时的 def 只能匹配 def
3、(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
与上面的类似,上面的表达式,可以改写成为:(?i:abc)def,或者 (?i)abc(?-i:def)
4、(?=X) X,通过零宽度的正 lookahead
5、(?!X) X,通过零宽度的负 lookahead
(?=X) 表示当前位置(即字符的缝隙)后面允许出现的字符,比如:表示式 a(?=b),在字符串为
ab 时,可能匹配 a,后面的 (?=b) 表示,a 后面的缝隙,可以看作是零宽度。
(?!X) 表示当前位置后面不允许出现的字符
6、(? <=X) X,通过零宽度的正 lookbehind
7、(? <!X) X,通过零宽度的负 lookbehind
这两个与上面两个类似,上面两个是向后看,这个是向前看
8、(?>X) X,作为独立的非捕获组
匹配成功不进行回溯,这个比较复杂,也侵占量词“+”可以通用,比如:\d++ 可以写为 (?>\d+)。
我认为,第1、2、3点比较好理解,4、5、6、7看类懂,还是用示例来说明:从“aacabab”找a,且后面只允许出现b。代码如下:
Pattern p = Pattern.compile("a(?=b)");
Matcher m = p.matcher("aacabab");
while(m.find()) {
System.out.println(m.group()+", start="+m.start()+", end="+m.end());
}
运行结果:
a, start=3, end=4
a, start=5, end=6
个人理解:在(?=b)这个“式”后面允许出现b,且这个“式”不占正则表达式位置(所谓0宽度),lookahead 的意思是b字符的前面,它前面紧接着是a,也就是a后面出现b。
8比较难理解, 推荐的链接找到答案:
http://www.regular-expressions.info/atomic.html
其中说的示例:来看 /\b(integer|insert|in)\b/ 匹配 integers 过程,第一个,当integer\b匹配到s时失败,然后字符串(integers)会回溯到i,再接着第二个(insert)去匹配。而把模式写成 /\b(?>integer|insert|in)\b/ 在刚才的第一个匹配失败,字符串(integers)不会回溯了,也不会有第二个去匹配了,所有速度会快一点点。
但是写 (?>X) 这种式子时要注意,是从左到右看的。/\b(?>integer|insert|in)\b/ ,与 /\b(?>in|integer|insert)\b/ 去匹配 insert,结果会不一样,前者可以匹配到,后者不能,什么原因自己分析下。一但匹配失败就会跳过,所以应该长的写在表达式前面。
参考:
http://topic.csdn.net/u/20080503/01/3c82b040-43b9-4b44-847d-07b366285957.html
http://www.regular-expressions.info/atomic.html
java正则表达式的(?:X),(?=X),(?!X),(?<=X),(?<!X),(?>X)的含义
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zfq642773391/archive/2010/05/04/5555602.aspx
发表评论
-
深入JVM锁机制
2011-09-19 01:00 944目前在Java中存在两种 ... -
Java文件映射[mmap]揭秘
2011-06-08 20:10 1096前言 相信现在 ... -
原创 java的Mmap二三事
2011-06-08 19:46 1159转自 :http://blog.csdn.net/kabini ... -
java 安全沙箱模型详解
2011-04-18 16:29 908起到第一道安全保障作 ... -
非阻塞算法-ReentrantLock代码剖析之ReentrantLock.lock
2011-04-15 13:59 1048ReentrantLock是java.util.concurr ... -
CyclicBarrier与CountDownLatch、栅栏与计数器
2011-04-15 10:39 1432在多线程设计中,我猜常常会遇到线程间相互等待以及某个线程等待1 ... -
Java KeyStore
2011-04-13 17:17 1427简介Java自带的keytool工具是个密钥和证书管理工具。它 ... -
Security Managers and the JavaTM 2 SDK
2011-04-12 13:37 740The original Link : http://do ... -
Something about SecurityManager
2011-04-12 13:33 751The Java Security was made up o ... -
Using the Java SecurityManager with Tomcat
2011-04-12 13:30 963Why use a SecurityManager? The ... -
Java安全管理器(Security Manager)(
2011-04-11 14:54 857转载自: http://blog.sina.com.cn/s/ ... -
Java对象的强、软、弱和虚引用(1)
2011-04-01 08:44 776本文介绍Java对象的强 ... -
Java对象的强引用、软引用、弱引用和虚引用
2011-04-01 08:39 874在JDK1.2以前的版本中, ... -
java 高并发 ReentrantLock -- 可重入的锁
2011-03-30 08:09 2290ReentrantLock -- 可重入的锁 可重入锁指 ... -
线程运行栈信息的获取
2011-03-24 17:23 1273线程运行栈信息的获取 ... -
java序列化——Serializable
2011-03-15 23:17 1033类通过实现 java.io.Serializable 接口 ... -
Java aio(异步网络IO)初探
2011-03-11 16:34 1528按照《Unix网络编程》的 ... -
JAVA NIO 简介
2011-03-11 13:38 10821. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
[字节码系列]ObjectWeb ASM构建Method Monitor
2011-03-08 18:08 833在前面的篇章中,我们看到Java Instru ... -
深入了解Java ClassLoader、Bytecode 、ASM、cglib
2011-03-08 16:35 831一、Java ClassLoader 1,什 ...
相关推荐
* Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...
正则表达式 [Jj]ava.+ 匹配下列形式的任何字符串: 首字母是J或j 后续的三个字母是ava 字符串的剩余部分由一个或多个任意字符组成 例如,字符串“javaness”匹配这个特殊的正则表达式,但是字符串“Core Java”...
资源来自pypi官网。 资源全名:cdk_datalake_constructs-0.0.12-py3-none-any.whl
资源分类:Python库 所属语言:Python 资源全名:datadog-cdk-constructs-v2-0.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
python库。 资源全名:aws-solutions-constructs.aws-sns-sqs-1.69.0.tar.gz
python库。 资源全名:constructs-10.0.35-py3-none-any.whl
python库。 资源全名:constructs-3.3.169-py3-none-any.whl
python库。 资源全名:constructs-10.0.56-py3-none-any.whl
python库。 资源全名:constructs-10.0.40-py3-none-any.whl
资源来自pypi官网。 资源全名:aws-solutions-constructs.aws-s3-lambda-1.55.0.tar.gz
资源来自pypi官网。 资源全名:aws-solutions-constructs.aws-lambda-s3-1.54.0.tar.gz
python库。 资源全名:aws-solutions-constructs.aws-lambda-s3-1.81.0.tar.gz
资源来自pypi官网。 资源全名:constructs-3.3.164-py3-none-any.whl
资源来自pypi官网。 资源全名:aws-solutions-constructs.aws-s3-lambda-1.94.0.tar.gz
资源来自pypi官网。 资源全名:aws-solutions-constructs.aws-s3-sqs-1.83.0.tar.gz