文档章节

java学习笔记四:正则表达式

marina李梦晓
 marina李梦晓
发布于 2016/10/08 21:33
字数 3528
阅读 4
收藏 1

    今天接触了正则表达式,我们在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就可以很好地描述这些规则。换句话说,正则表达式就是记录文本规则的代码。

    现在用一个实例来说明正则表达式的威力.

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
    </body>
</html>

    上面是一段很简单的文字,是前阵子的一个热门新闻,如何使用正则表达式将新闻中的三个当事人名字换成他们各自的新浪微博超链接呢?其实,这是一个很简单的事情:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
		   var p=document.getElementById("content");
		   var str=p.innerHTML;
		   var reg1=/王宝强/g,reg2=/马蓉/g,reg3=/宋喆/g;
		   var str1=str.replace(reg1,"<a href='http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1'>王宝强</a>"),
		   str2=str1.replace(reg2,"<a href='http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1'>马蓉</a>"),
		   str3=str2.replace(reg3,"<a href='http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1'>宋喆</a>");
		   p.innerHTML=str3;
       </script>
    </body>
</html>

我用了三个正则表达式,三次字符串替换,就搞定!但是问题来了,用一次正则表达式,一次替换,能否实现同样的方法?可以,如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			var p=document.getElementById("content");
			var str=p.innerHTML;
			//replace方法第二个参数使用函数(function)时,变量名可以随便设置,因为系统会自动将每次的匹配结果代入函数中
			var str1=str.replace(/(王宝强|马蓉|宋喆)/g,function (person) {
				switch(person){
					case "王宝强":
                    return "<a href='http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1'>王宝强</a>";
					break; 
					case "马蓉":
                    return "<a href='http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1'>马蓉</a>";
					break;
					case "宋喆":
                    return "<a href='http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1'>宋喆</a>";
					break;
				}
			});
			p.innerHTML=str1;
       </script>
    </body>
</html>

这样还是不够简便,更简便的方法还有:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			var p=document.getElementById("content");
			var str=p.innerHTML;
			list={
				"王宝强":"http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1",
				"马蓉":"http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1",
				"宋喆":"http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1"
			}
			var newStr=str.replace(/(王宝强|马蓉|宋喆)/g, function (w) {
				return "<a href='"+list[w]+"'>"+w+"</a>";
			});
			p.innerHTML=newStr;
       </script>
    </body>
</html>

将每个人的名字作为list对象的属性,微博地址为其属性值,用list[属性名]来引用属性值,就可以使replace里的函数更简单。每次用js研究出来一套方法的时候,大部分人就会想到将它作为插件行不行?哎,有了:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>
		</title>
	</head>
	<body>
		<p id="content">新浪娱乐讯 8月14日凌晨,王宝强发布声明,宣布与妻子马蓉解除婚姻关系。王宝强称马蓉出轨自
己的经纪人宋喆。就在去年2月,有高铁乘务员曝出马蓉与经纪人暧昧,后疑似宋喆私信要求删除,并自曝个人性取向,以证清白。
王宝强发布声明后,一名网友发微博揭露乘务员学妹曾撞破马蓉与宋喆暧昧。该网友写道:“去年我在高铁上班的学妹就拍到了王宝
强老婆跟王宝强经纪人的奸情,我们都发了微博,还被王宝强经纪人私信要求删掉!纸果然保不住火,心疼宝宝 (附当时王宝强经
纪人私信给我学妹的图和当时发朋友圈的图,诶…当时没经住恐吓,认怂把微博删了,只有这些截图了。”截图中为私信内容,私信的
另一方正是王宝强经纪人宋喆,微博名显示为@2046人生如戏 。宋喆称乘务员发布的内容造谣,并反问:“你知道我的性取向嘛?就
这么说。”疑自曝同性恋,力证与马蓉清白。8月14日凌晨,另一网友转发王宝强微博,称去年11月有朋友同样撞破马蓉出轨,该网
友爆料:“我想说,我加的一个代购,去年11月在机场就撞到他老婆和他经纪人搂搂抱抱了,然而海关那不让拍照,所以当时就没存
图。果然,事情早晚有败露的一天。”该代购2015年11月27日发博:“自从在机场偶遇某男星的老婆和另外一个男的各种暧昧搂腰摸
头还贴面私语后,再看见他们夫妻秀恩爱晒幸福总觉得怪怪的。真的好想揭穿她的真面目啊啊啊啊啊啊,憋死我了。 ” 8月14日凌
晨,该代购再次翻出昔日微博,证实确有其事。(禾失)</p>
       <script type="text/javascript">
			list={
				"王宝强":"http://weibo.com/u/1254123322?topnav=1&wvr=6&topsug=1&is_hot=1",
				"马蓉":"http://weibo.com/u/1828817187?topnav=1&wvr=6&topsug=1&is_hot=1",
				"宋喆":"http://weibo.com/u/1158495540?topnav=1&wvr=6&topsug=1"
			}
			function execReg(list) {
				var p=document.getElementById("content");
				var str=p.innerHTML;
				var regStr="(";
				for(var name in list){
					regStr+=name+"|";
				}
				regStr=regStr.substring(0,regStr.length-1);//去掉最后一个"|"
				regStr+=")";
				var reg=new RegExp(regStr,'g');
				var newStr=str.replace(reg, function (w) {
					return "<a href='"+list[w]+"'>"+w+"</a>";
				});
				p.innerHTML=newStr;
			}
			execReg(list);
       </script>
    </body>
</html>

方法execReg()就可以写在一个插件里面,我们只要在外面定义好p标签的内容,id设为"content",再建一个list对象写上要替换的字和替换的东西,就可以直接引用插件来一键替换,欧了!

© 著作权归作者所有

marina李梦晓
粉丝 12
博文 36
码字总数 22337
作品 0
昆明
程序员
私信 提问
为 Java 程序员准备的 10 分钟 Perl 教程

这10分钟教程并不是Java和Perl的比较。目标是探索作为Java开发人员如何快速学习Perl。以下是一些从我的角度来看的关键笔记。 1.从基础开始 不像java,Perl不需要“main”方法作为入口点。要运...

oschina
2013/11/08
7.6K
17
java正则表达式对字符串的操作

学习java正则表达式的都知道,它的重要性;但同时也了解它的难度和复杂性。所以为了加深我们对它的了解。我举了几个例子: 例子1、 查找以Java开头,任意结尾的字符串 Pattern pattern = Patt...

goqin
2012/06/29
156
0
javascript通用的一个验证注册实例

效果如图所示:今天共享给大家 练习 转载注明出处www.gjrencai.com ///////////////////////代码如下/////////////////////////// <htmlhtmljavahtmlhtml> <head> <meta http-equiv="content......

gjrencai
2011/01/11
81
0
js和java中正则表达式的易混淆点

js中正则表达式的使用 对表单中的值进行正则表达式匹配一般有两种方法: var reg = new RegExp(regStr); reg.test(value); 如下: var reg = new RegExp(“\d{3}”); reg.test(“abc123def”...

绝影jy
2014/07/30
1K
0
JavaScript正则表达式(JavaScript:The Definitive Guide笔记)

//1.0 字符类 [...] 方括号内的任意字符 [^...] 不再方括号里面的任意字符 . 除换行符和其他Unicode行终止符之外的任意字符 w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9_] W 任何不适ASCII...

chungwoo.J
2012/09/09
228
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
41分钟前
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部