学习正则表达式入门,这一篇就够了,教学实例代码加解析

17 篇文章 3 订阅
4 篇文章 0 订阅

普通交流群698307198欢迎加入v群,和各位大神一同交流
免责声明:本博客提供的所有内容仅供学习、分享与交流,我们不保证内容的正确性。通过使用本博客内容随之而来的问题与本博客无关。当使用本博客代码时,代表你已接受本博客的免责声明

正文部分

1.为什么学习正则表达式

正则表达式在很多语言中都会用到,其内容几乎是独立于一门语言。事实上,正则表达式有着非常广泛的应用。比如在java python php等语言都可以用.

正则表达式的英文是regular expression,意思是符合某种规则的表达式,

可以将其理解为一种对文字进行模糊匹配的语言。

其功能主要是

  • 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码或ip地址或者某个字符串。这称为数据有效性验证。

  • 替换文本。可以在文档中使用一个正则表达式来标识某些特定文字,然后全部将其删除,或者直接替换为其他文字。

  • 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

不要认为他有多难学,其实也就是常量+变量的模式,

有大佬曾说:抽象层越高级,适用的范围就越广.

对于九黎而言:正则表达式就是这样,他把很多概念条件(比如开头匹配,末尾匹配,匹配数字等)
写为了变量(^,$,\d等),使得这些条件能够像常量一样去查找.

基本知识点

假设总的文本为
123
158
1666
170.456.45.4
九黎aj加油
九黎加油

问号 ?匹配零次或一次前面的分组。

问号可以实现可选匹配,也就是无论存不存在123,都会认为匹配

当你想实现匹配真正的问号时候,用转义\?,其他的比如星号什么的匹配,

也是这样的.倒斜杠+星号
实例:匹配123

(123)?

其中括号是为了告诉前面的分组是括号里的123

星号* 匹配零次或多次前面的分组。

实例:匹配九黎aj加油和九黎加油

通过分析知道,匹配条件为九黎(aj)*加油

不管有没有aj这个词,他都会匹配到

加号+匹配一次或多次前面的分组。

星号意味着匹配零次或者多次,而加号意味着匹配一次或者多次,星号不要求分组出现在匹配的字符串中,而加号前面的分组必须至少出现一次,是不可以选的,如果他没有出现一次将匹配不到
比如实例:九黎aj加油和九黎ajaj加油,九黎加油
匹配:九黎aj加油和九黎ajaj加油

通过分析知道,匹配条件为九黎(aj)+加油

{n}匹配n次前面的分组。

如果想要一个分组重复特定次数,就在正则表达式中,在该分组的后面跟上花括号包围的数字,
比如说,ha和hahaha,你可以直接用(ha){3}来匹配hahaha

{n,}匹配n次或更多前面的分组。

这个我觉得很好理解,就是在花括号N的基础之上,因为不确定是不是比n次更多,所以可以用{n,}

●{n,m}匹配n次到m次前面的分组。

{n,m}?或*?或+?对前面的分组进行非贪心匹配。

^九黎意味着字符串必须以九黎开始。

加油$意味着 字符串必须以加油结束。

.点 匹配所有字符,换行符除外

比如匹配任一32位字符串(.{32})

\D \W和\S分别匹配除数字、单词和空格外的所有字符。

[abc]匹配在方括号内的任意字符。

注意!这个比较容易理解错误
这个是指将a,b,c三个字符串单独拿出来去匹配,不是指匹配[123]
的123
是指 文本 acdfgh
中匹配a,b,c,其中,b没有找到
匹配结果a c,运行结果是[a,c]

[^abc]匹配不在方括号内的任意字符

同样的,
文本 acdfgh
中匹配除ac以外的

[^ac]

括号,中括号,大括号的用法

( ) 小括号表示匹配括号中全部字符
[ ] 中括号表示匹配括号中一个字符 或者范围描述 如[0-9 a-z A-Z]
{ } 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m

^([1-9]{0,1}[0-9]{0,5})$ 这个正则表达式表示什么意思?

意思是匹配0~999999的数字,包括类似001这样的数字。
怎么看他能匹配到多少位呢?
九黎开始第一眼看到也是有点懵逼。测试了一下发现应该是花括号{}里的右边数字相加,就能得到最大位数了,最小位数为左边相加。

^([1-9]{0,1}[0-9]{3,6})$

匹配的就是3位数到7位数
但是注意啊,你如果001,000也是能匹配到的

具体解析:
^:匹配字符串开始,
([1-9]{0,1}[0-9]{0,5})

是一个组,用括号括起来。组内有两个部分:

[1-9]{0,1} {0,1}表示匹配0到1次

[0-9]{0,5} {0,5}表示匹配0到5次
[1-9]{0,1}:

[1-9]表示1到9的数字,[0-9]表示1到9的数字
$:匹配字符串结尾

更多实例(部分从网络收集)




如   只匹配汉字
^[\u4e00-\u9fa5]{1,}$
将会只匹配汉字,方便快速。有些人的代码为^[\u4e00-\u9fa5]{0,}$这个可能会匹配到空格

一、校验数字的表达式
1 数字:^[0-9]*$
2 n位的数字:^\d{n}$
3 至少n位的数字:^\d{n,}$
4 m-n位的数字:^\d{m,n}$
5 零和非零开头的数字:^(0|[1-9][0-9]*)$
6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
二、校验字符的表达式
1 汉字:^[\u4e00-\u9fa5]{0,}$
2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:^.{3,20}$
4 由26个英文字母组成的字符串:^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:^[A-Z]+$
6 由26个小写英文字母组成的字符串:^[a-z]+$
7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
12 禁止输入含有~的字符:[^~\x22]+
三、特殊需求表达式
1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份证号(15位、18位数字):^\d{15}|\d{18}$
8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$  
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 钱的输入格式:
16    1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
17    2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
18    3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
19    4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
20    5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
21    6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
22    7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
23    8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
24    备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
26 中文字符的正则表达式:[\u4e00-\u9fa5]
27 双字节字符:[^\x00-\xff]    (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
28 空白行的正则表达式:\n\s*\r    (可以用来删除空白行)    九黎提醒注意:\n是编译器中用来换行的,如果你的换行代码不一样,请直接替换
29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />    (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
30 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$)    (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
31 腾讯QQ号:[1-9][0-9]{4,}    (腾讯QQ号从10000开始)
32 中国邮政编码:[1-9]\d{5}(?!\d)    (中国邮政编码为6位数字)
33 IP地址:\d+\.\d+\.\d+\.\d+    (提取IP地址时有用)

效果图

参考文章

<<python编程快速上手>>al sweigart著
百度查询部分资料
.

所属语言

python,php,JavaScript,java等

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

QQ群

698307198
扫一扫二维码,加入群聊.QQ

在这里插入图片描述

说明:
本文提供的代码仅供参考。

博主 主要做autojs软件
Auto.js简介
Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵,触摸精灵.懒人精灵等一样,可以通过代码模拟一系列界面动作的辅助工作。
而与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。通过控件点击可以实现全分辨率的模拟人工点击效果

Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。新的autojs pro9系列可以使用node.js开发

开发文档
Auto.js Pro开发文档:点击这里

文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。

为什么要使用Auto.js Pro开发脚本,有什么特点?

吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:

  1. Auto.js Pro能开发免ROOT的安卓脚本 Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型
  2. 可以使用手机开发,这使得开发者更多,有更多代码可以参考学习.在此也欢迎加入九黎的vip群,目前已经收集或者开发了大概4000余代码,覆盖各个分类.
  3. Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面 Auto.js.并且可以使用原生xml
  4. Pro使用的javascript的语法比较优雅,代码可读性强 Auto.js Pro的命令库非常的丰富,接口比较多 Auto.js
  5. Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告
    相关教程
    点击这里看更多 Auto.js Pro教程
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值