正则表达式复习

前言

这是我第一次复习之前学的的正则表达式,以后说不定会有补充和再次的复习。
本文会复习正则表达式的知识点,并且会写几个不同编程语言环境下的使用方式。

介绍

正则表达式(Regular Expression)是用来匹配字符串的,我们可以用来写爬虫爬网页上的内容,老实说我最初想学这个就是想在e站上爬点h图 =。=

普通字符

首先,正则表达式里面的内容也是字符串,如果你在表达式里写了aA,那可以匹配到"1aAdAfa"中的"aA"。其中aA代表着它本来的意思,也就是两个普通字符。然而也有大量的字符被赋予全新的意义了。

元字符

说实话网上看到好多分类并且有好多平常用不到字符的这里就暂不写了(先看具体的可以去runoob上看),元字符就是有特殊意义的字符。
如果想让它恢复本来的意义,如"\d"的意思是匹配所有数字,"\\d"的意思是"\d"。

元字符特殊含义
^以什么为开头
$以什么为结尾
^$合起来就是前后完全匹配内容
\d数字0-9(其实会转为字符)
\w数字、字母、下划线
\s空格
\b字符与空格之间的位置
.任意字符(除\n和自身,自身要转义)
\b字符与空格之间的位置
[]匹配该区间中任意字符:[0-9a-zA-Z_]同等于\w
以下字符用来指正修饰以上字符
*0-多个字符,如:a*,匹配a重复>=0次
+1-多个字符,如:a+,匹配a重复>=1次
0-1个字符,如:a?,匹配a重复0-1次
{m}m个字符,如:a{10},匹配a重复10次
{m,}m个字符,如:a{10,},匹配a重复大于10次
{m,n}m-n个字符,如:a{0,1},效果等同于a?
\D,\B,\S,\W与小写的反义
[^…]区间中非匹配…,如:^ [^ -]\d+$ ,匹配非负数
( )将字符分组,分组里可以用|表达或的意思,如:(1|2|3) 等同于[123]

注意:博主之前一直分不清楚\s和\b的区别,根据上面的介绍和一下的图可以更好的分辨。
在这里插入图片描述
在这里插入图片描述

练习

有一些博客提供了很好的例子,这里给出友情链接:
https://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html(写的很全)
https://www.cnblogs.com/zery/p/3438845.html(关于html的实战不错)

通过js使用正则表达式

js表达式用起来最舒服,这里介绍部分知识点

<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
	<script type="text/javascript">
		var str="123";
		//两种表达式写法
		var reg1=new RegExp("\\d\\d\\d");//注意转义
		var reg=/\d\d\d/;
		//test方法判断是否匹配成功
		console.log(reg1.test(str)); //true
		console.log(reg.exec(str));  //Array [ "123" ]匹配字符,返回数组
		console.log(str.match(reg)); //非全局模式下和exec效果一样,全局模式下返回所有匹配项
	</script>
</body>
</html>
通过java使用正则表达式
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * java环境下使用正则表达式
 * 
 * @author Vision
 *
 */
public class RegTest {
	public static void main(String[] args) {
		Pattern pattern = Pattern.compile("\\d\\d\\d");// Pattern是模式类
		Matcher matcher = pattern.matcher("123 233ade");// Matcher是匹配器
		System.out.println(matcher.matches());// mathes是要完全匹配,不匹配返回false
		// pattern.matches("\\d\\d\\d", "123 233ade");与上面三句等效
		int index = 0;
		while (matcher.find()) {// find(int)可以指定位置
			System.out.println(index + " " + matcher.group());// group返回以前匹配的序列
			index++;
		}
	}
}

结果:
在这里插入图片描述

通过python使用正则表达式
# coding=utf-8
# 通过py使用正则表达式
import re

# 预先编译
# com=re.compile(r'^(\d{3})\s(\d{3})([a-z]{3})')
# com.match('123 233ade')
# 与上两句等效
m = re.match(r'^(\d{3})\s(\d{3})([a-z]{3})', '123 233ade')
if (m):
    print("true")  # true
    
# 分组
print(m.groups())  # 所有分组('123', '233', 'ade')
print(m.group(0))  # 原始字符串 123 233ade
print(m.group(1))  # 第一个:123
print(m.group(2))  # 第二个:233
print(m.group(3))  # 第三个:ade

# split与正则表达式
str = 'a, dd:e hh'
print(re.split(r'[,\s:]+', str))  # ['a', 'dd', 'e', 'hh']

总结

这里复习了一下正则表达式,写了一些常用的东西,看了一下别人的博客感觉自己要学的东西还有很多啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值