学习正则表达式入门,这一篇就够了,教学实例代码加解析
Posted 九黎AJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习正则表达式入门,这一篇就够了,教学实例代码加解析相关的知识,希望对你有一定的参考价值。
普通交流群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的原因有很多。最主要的几个原因是:
- Auto.js Pro能开发免ROOT的安卓脚本 Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型
- 可以使用手机开发,这使得开发者更多,有更多代码可以参考学习.在此也欢迎加入九黎的vip群,目前已经收集或者开发了大概4000余代码,覆盖各个分类.
- Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面 Auto.js.并且可以使用原生xml
- Pro使用的javascript的语法比较优雅,代码可读性强 Auto.js Pro的命令库非常的丰富,接口比较多 Auto.js
- Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告
相关教程
点击这里看更多 Auto.js Pro教程
以上是关于学习正则表达式入门,这一篇就够了,教学实例代码加解析的主要内容,如果未能解决你的问题,请参考以下文章