greedy, reluctant, possessive 三种匹配模式在 http://docs.oracle.com/javase/tutorial/essential/regex/quant.html有详细介绍,
greedy表示每次eat entire string, if not matched, back off one character step by step until matches, so for the remaining string; reluctant means eat "nothing" at first, if not matched, then eat one character step by step until matches, so for the remaining string; possessive is like greedy, eat the entire string at first, but it never backs off any character if not matched.
关于jdk api中的Special constructs (named-capturing and non-capturing):
(?:X)表示不将X捕获为一个组
Pattern p = Pattern.compile("windows(?:98)(OS)");
String str = "windows98OS";
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group(1));
System.out.println(m.groupCount());
}
结果:
OS
1
其中group(0)表示entire string, 并不包含在groupCount里,这里要注意。上面代码可以看出98并没有被捕获成一个组。
其中(?=X)表示lookahead, 存在X
//positive lookahead
Pattern p = Pattern.compile("windows(?=98)");
String str = "windows98OS";
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group());
System.out.println(m.groupCount());
}
输出:
windows
0
其中(?=98)只是做为判断条件,并不consume字符,因此98也参与下次的匹配。
windows(?=98)表示windows后面要有98,否则不匹配,但98并不参与匹配。
(?!X) 表示negative lookahead, negative表示否定,即不能为。
(?<X) positive lookbehind, 向后找,存在X
(?<!X) negative lookbehind, 向后找,不存在X
Pattern p = Pattern.compile("windows98(?<!95)");
String str = "windows98OS";
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group());
System.out.println(m.groupCount());
}
注意:(?X) (?<X) 等这些都不消耗字符,也就不包含在组里,只是纯粹的判断条件。
还有一个 (?>X) X, as an independent, non-capturing group, 不知道怎么用,知道的兄弟请给我留言。
JS正则:参考 http://www.jb51.net/article/28007.htm http://www.2cto.com/kf/201204/128406.html http://blog.csdn.net/ethanq/article/details/6869055
下面是群里一兄弟问的问题,一个字符串,如果末尾是数字则返回所有数字,如果没数字,返回0,例如4323Fasfa143, 则返回143, fasfa343a 返回0
下面分别是java和js版本
String str = "4324Ad34FDAsd243";
Pattern p = Pattern.compile("^(\\w*?)(\\d+)$");
Matcher m = p.matcher(str);
boolean found = false;
while(m.find()){
found = true;
System.out.println(m.group());
System.out.println(m.group(2));
}
if(!found){
System.out.println(0);
}
<SCRIPT>
var reg = /^([\W\w]*?)(\d+)$/ig
var str = '432fdsafa243fafa1343';
var arr = reg.exec(str);
alert(arr[2]);
</SCRIPT>
其中js版本中要判断下reg.exec是否返回null,返回null表示末尾不是数字。
分享到:
相关推荐
ibatis例子加教程&java&javascript&dhtml&正则表达式工具
JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&正则表达式JavaScript&...
快速的掌握简单的java、JavaScript正则表达式,
这里有很全面的正则表达式,清晰使用说明,让浏览的朋友对正则深入浅出
许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理...
详细的介绍js的正则表达式,和常用的应用场景
java开发必备参考资料包含java,tomcat,js正则表达式
邮箱校验正则表达式,及其jsp编写过程,JavaScript表单验证email邮箱,判断一个输入量是否为邮箱email,通过正则表达式实现。
包含 Java正则表达30分钟入门教程 JavaScript正则表达 30分钟绝对全部掌握
自己写的一个纯java类对正则表达式的处理,包括验证,比较实用,读者直接拷贝过来就可以用
包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个数字(金额不超过万亿精确到小数点后两位) 请输入一个数字(精确到小数点后两位): ...
java和js实现的部分常用校验器,包括: 1、身份证号校验; 2、电话号码校验(移动电话或者固话); 3、车牌号校验; 4、车架号VIN码校验。 具体网址:http://blog.csdn.net/jodenhe/article/details/77962753
Java中的正则表达式,简单易学,可以做爬虫,像动态的下雨特效,一朵闪闪的云朵,洒落下无数个对方的名字缩写,一眼就爱了,很有科技感。简单易学,仅仅一个首页几行代码,css和js封装样式和动态,定时器的做法,...
希望对正在求职的朋友们有所帮助!
java正则表达式规则,包含java正则表达式基本知识、JavaScript RegExp对象参考手册、支持正则表达式的 String 对象的方法、定义正则表达式等内容。文档中有表达式的学习视频下载,配合文档会有不错的效果!
JS正则表达式大全,用于javascript中如何使用正则表达式的概述与代码。
java-包名-正则表达式 Java 包名的正则表达式。 使用安装 npm i java-packagename-regex --save 用法 var packageNameRe = require ( 'java-packagename-regex' ) ; var match = packageNameRe ( ) . exec ( '...
正则表达式的定义 一个RegExp对象的每一次估值都返回新对象,这意味着RegExp是可变对象。
VBScript JavaScript JS VC JAVA VB 超链接 正则表达式
JS和JAVA正则基础信息以及相关的匹配规则和表达式的相关使用