正则表达式在javascript和java中如何使用
2012-10-30 20:43
363 查看
正则表达式只要有两个功能: 模式的检验与替换
在开始之前先简单介绍一下正则表达式的基础,以下为我做的摘录:
表示匹配元素的符号
'.' 符号匹配所有字符,包括空格、Tab字符甚至换行符。
'[]' 方括号里面指定参与匹配的字符. eg. 正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。
'(|)' “|”操作符的基本意义就是“或”运算. eg.要匹配“toon”,使用“t(a|e|i|o|oo)n”。这里不能使用[],因为[]只允许匹配单个字符。
'^' 否定的标志 ,如 [^x][a-z]+,表示的首字符不可以为x
'\s':空格标志 eg. "June 12, 1991 ",则表达式为:[a-z]+\s+[0-9]{1,2},\s*[0-9]{4},如果需要提取其中的月份则需要加上圆括号进行分组,([a-z]+)\s+[0-9]{1,2},\s*[0-9]{4},这已经涉及到了字符串的替换了。
表示匹配次数的符号
'*':o次或多次 '+':1次或多次 '?':0次或1次 '{n}':匹配n次 '{n,m}':匹配n-m次
如 999-88789-9800 则正则表达式为 :[0-9]{3}\-[0-9]{5}\-[0-9]{4},如果999887899800也算正确的话可以改为:[0-9]{3}\-?[0-9]{5}\-?[0-9]{4}
一些快捷的符号
\d:[0-9] \D:[^0-9] \w:[A-Z0-9] \W[^A-Z0-9] \s:[\t\n\r\f] \S:[^\t\n\r\f]
因此我们可以将 [0-9]{3}\-[0-9]{5}\-[0-9]{4} 修改为:\d{3}\-\d{5}\-\d{4}
下面我们将使用一些简单的例子来介绍,需要注意的是在java 和 javascript 使用正则表达式有一点点不同的地方,我这里只介绍使用的方法,不具体介绍各种用法(具体参看Javascript中:http://www.iteye.com/topic/481228 ,java中 :http://blog.csdn.net/b10090120/article/details/7784410)
我们针对字符串:<peter> <lionel>\"www.163.com\"<kenny><>1234 5678 进行操作
Javascript中
<html>
<head>
<title>reg</title>
<script type="text/javascript">
var str="<peter>dsadasdas<lionel>\"www.163.com\"<kenny><>";
var reg=/(<[^>]*>)/g; //g (全文查找) i (忽略大小写)m (多行查找)
//查询到所有符合条件的子字符串
var cc = str.match(reg);
alert(cc[2]);
//将reg为标准分割数组
arr = str.split(reg);
alert(arr[1]);
//replace,替换与正则表达式匹配的子串,其中分组字串放在$1~$9中
alert( str.replace(reg,'替代它'));
alert(str.replace(reg,"<imgsrc='$1'></img>"));
var ree = /(\d)\s(\d)/;
alert( str.replace(ree,"$2,$1"));//在这个里面$1表示第一个分组1234,$2则表示5678
//在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search
alert(str.search(reg));//返回查找到的字符串开始下标0</script>
</head>
<body>
Reg测试
</body>
</html>
注附带:
var re=/@(\S+)+(\s)?/g; //筛选出 @xx ,并进行替换
str=str.replace(re,'<a class="marked-name" href="<person>" rel="weiboAtem-username" name="$1" >@$1</a>');
//拼凑的正则表达式
var userFacesCn ="微笑" ;
var userFaces ="pic_1.gif";
var reg= new RegExp("\\["+userFacesCn+"\\]",'g');
weiboContent = weiboContent.replace(reg,"["+userFaces+"]");
var osVersion = "Ubuntu 8";其中的8表示系统主版本号
exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配
re=/^[a-z]+\s+(\d+)$/i;用()来创建子匹配
arr =re.exec(osVersion);
alert(arr[0]);整个osVersion,也就是正则表达式的完整匹配
alert(arr[1]);8,第一个子匹配,事实也可以这样取出主版本号
alert(arr.length);2
osVersion = "Ubuntu 8.10";取出主版本号和次版本号
re = /^[a-z]+\s+(\d+)\.(\d+)/i;.是正则表达式元字符之一,若要用它的字面意义须转义
arr = re.exec(osVersion);
alert(arr[0]);完整的osVersion
alert(arr[1]);8
alert(arr[2]);10
Java中
String s = "<peter>dddd<lionel>\"www.163.com\"<kenny><>";
Pattern p =
Pattern.compile("(<[^>]*>)");
Matcherm = p.matcher(s);
List<String>result=newArrayList<String>();
while(m.find()){
result.add(m.group());
}
for(String s1:result){
System.out.print(s1+’,’);
}
输出结果为:<peter>,<lionel>,<kenny>,
在开始之前先简单介绍一下正则表达式的基础,以下为我做的摘录:
表示匹配元素的符号
'.' 符号匹配所有字符,包括空格、Tab字符甚至换行符。
'[]' 方括号里面指定参与匹配的字符. eg. 正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。
'(|)' “|”操作符的基本意义就是“或”运算. eg.要匹配“toon”,使用“t(a|e|i|o|oo)n”。这里不能使用[],因为[]只允许匹配单个字符。
'^' 否定的标志 ,如 [^x][a-z]+,表示的首字符不可以为x
'\s':空格标志 eg. "June 12, 1991 ",则表达式为:[a-z]+\s+[0-9]{1,2},\s*[0-9]{4},如果需要提取其中的月份则需要加上圆括号进行分组,([a-z]+)\s+[0-9]{1,2},\s*[0-9]{4},这已经涉及到了字符串的替换了。
表示匹配次数的符号
'*':o次或多次 '+':1次或多次 '?':0次或1次 '{n}':匹配n次 '{n,m}':匹配n-m次
如 999-88789-9800 则正则表达式为 :[0-9]{3}\-[0-9]{5}\-[0-9]{4},如果999887899800也算正确的话可以改为:[0-9]{3}\-?[0-9]{5}\-?[0-9]{4}
一些快捷的符号
\d:[0-9] \D:[^0-9] \w:[A-Z0-9] \W[^A-Z0-9] \s:[\t\n\r\f] \S:[^\t\n\r\f]
因此我们可以将 [0-9]{3}\-[0-9]{5}\-[0-9]{4} 修改为:\d{3}\-\d{5}\-\d{4}
下面我们将使用一些简单的例子来介绍,需要注意的是在java 和 javascript 使用正则表达式有一点点不同的地方,我这里只介绍使用的方法,不具体介绍各种用法(具体参看Javascript中:http://www.iteye.com/topic/481228 ,java中 :http://blog.csdn.net/b10090120/article/details/7784410)
我们针对字符串:<peter> <lionel>\"www.163.com\"<kenny><>1234 5678 进行操作
Javascript中
<html>
<head>
<title>reg</title>
<script type="text/javascript">
var str="<peter>dsadasdas<lionel>\"www.163.com\"<kenny><>";
var reg=/(<[^>]*>)/g; //g (全文查找) i (忽略大小写)m (多行查找)
//查询到所有符合条件的子字符串
var cc = str.match(reg);
alert(cc[2]);
//将reg为标准分割数组
arr = str.split(reg);
alert(arr[1]);
//replace,替换与正则表达式匹配的子串,其中分组字串放在$1~$9中
alert( str.replace(reg,'替代它'));
alert(str.replace(reg,"<imgsrc='$1'></img>"));
var ree = /(\d)\s(\d)/;
alert( str.replace(ree,"$2,$1"));//在这个里面$1表示第一个分组1234,$2则表示5678
//在字符串中查找时我们常用indexOf,与之对应用于正则查找的方法是search
alert(str.search(reg));//返回查找到的字符串开始下标0</script>
</head>
<body>
Reg测试
</body>
</html>
注附带:
var re=/@(\S+)+(\s)?/g; //筛选出 @xx ,并进行替换
str=str.replace(re,'<a class="marked-name" href="<person>" rel="weiboAtem-username" name="$1" >@$1</a>');
//拼凑的正则表达式
var userFacesCn ="微笑" ;
var userFaces ="pic_1.gif";
var reg= new RegExp("\\["+userFacesCn+"\\]",'g');
weiboContent = weiboContent.replace(reg,"["+userFaces+"]");
var osVersion = "Ubuntu 8";其中的8表示系统主版本号
exec返回的数组第1到n元素中包含的是匹配中出现的任意一个子匹配
re=/^[a-z]+\s+(\d+)$/i;用()来创建子匹配
arr =re.exec(osVersion);
alert(arr[0]);整个osVersion,也就是正则表达式的完整匹配
alert(arr[1]);8,第一个子匹配,事实也可以这样取出主版本号
alert(arr.length);2
osVersion = "Ubuntu 8.10";取出主版本号和次版本号
re = /^[a-z]+\s+(\d+)\.(\d+)/i;.是正则表达式元字符之一,若要用它的字面意义须转义
arr = re.exec(osVersion);
alert(arr[0]);完整的osVersion
alert(arr[1]);8
alert(arr[2]);10
Java中
String s = "<peter>dddd<lionel>\"www.163.com\"<kenny><>";
Pattern p =
Pattern.compile("(<[^>]*>)");
Matcherm = p.matcher(s);
List<String>result=newArrayList<String>();
while(m.find()){
result.add(m.group());
}
for(String s1:result){
System.out.print(s1+’,’);
}
输出结果为:<peter>,<lionel>,<kenny>,
相关文章推荐
- JavaScript 如何使用正则表达式
- 教你如何使用JavaScript正则表达式
- 如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码
- Android的JS调用Java代码或使用了Javascript相关技术,如何混淆
- JavaScript 如何使用正则表达式
- 如何使用Java中集合类的详细讲解
- 如何在Oracle中使用Java存储过程(详解)
- Java中字符串如何能够不使用科学计数法
- 使用java(spring)编写ajax的接口如何返回给请求者数据
- 如何在java环境下使用feature option(如何添加FeatureOption.xxx)
- 如何使用JAVA实现数字水印
- 如何在WebForm中使用javascript防止连打(双击)
- 使用java语言操作,如何来实现MySQL中Blob字段的存取
- ArcGIS API for JavaScript 4.2学习笔记[23] 没有地图如何进行查询?【FindTask类的使用】
- Java_JSP2_使用URL Rewrite如何实现网站伪静态?
- javascript 中的URL 编码问题! encodeURI, encodeURIComponent 如何使用
- java中如何使用内部类
- 如何使用 Java8 实现观察者模式?(上)
- 如何将一个json字符串当成一个JSON对应来使用,在java中
- 如何使用Proxy模式及Java内建的动态代理机制 推荐