分类
leetcode

正则表达式(正则表达式在线测试工具)

概念:在代码中常简写为regex、regexp或RE,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。(搜素模式可以用于文本搜索和文本替换)

语法:/正则表达式主体/修饰符(可选)

创建方式

  • 直接量语法创建:直接量定义为包含在一对斜杠(/)之间的字符
  • 构造函数创建:通过 RegExp() 构建函数可以实现动态创建正则表达式。

关于正则表达式的一些知识我们可以从以下几个方面来了解:

直接量字符:所有字母和数字都是按照字面含义进行匹配的,其他非字母的字符需要通过 \ 作为前缀进行转移。注意,它们都是精确匹配,每一个字符都只能匹配一个字符。

字符类:不想匹配某一个特定的字符而是想匹配某一类字符的情况下。

重复:当一个模式需要被多次匹配的时候。

选择:用| 字符分隔可供选择的模式,匹配时会尝试从左至右匹配每一个分组,直到发现匹配项。

引用:带圆括号的表达式的另一个用途是允许在同一个正则表达式的后面引用前面的子表达式。

分组:带 () 的可以把单独的项组合成子表达式以便可以像一个独立的单元用 |、*、+ 或者 ? 对单元内的项进行处理。

锚元素:不用来匹配实际的字符,而是匹配指定的位置。(任何正则表达式都可以作为锚点条件)

修饰符

  • i 执行不区分大小写匹配
  • g 全局匹配
  • m 多行匹配模式
  • y sticky 修饰符
  • s 表示点 . ,可以表示任意字符,不设置的话,四个字节的 UTF-16 字符和行终止符不能用 . 表示
  • u 开启 Unicode 模式,用于正确处理大于 \uFFFF 的 Unicode 字符
分类
leetcode

常用正则表达式大全(正则表达式大全(整理版))

以下所有的正则表达式均适用于查找,如果需要检验字符串是否为某个

基础需求

匹配数值

匹配标准正整数:[1-9]\d*

匹配以,分隔的正整数:[1-9][\d,]*(第一位不能为0)

匹配以,分隔的正整数或正小数:[1-9][\d,]*\.?\d*|0\.?\d*[1-9]\d*(整数部分为0时小数部分至少有一位不为0、小数部分不会出现,来间隔)

匹配以,分隔的整数或小数:(\-|\+)?[1-9][\d,]*\.?\d*|0\.?\d*[1-9]\d*|0(在数字前可以允许正号或负号;允许0)

其他匹配数值的需求基本都可以从以上几个正则表达式中略作修改即可。如果练习的话可以尝试实现以下需求:匹配有1-3位小数的正数;匹配非负数;匹配至少n位数字

匹配某种内容

匹配英文字符:[A-Za-z]+

匹配英文或数字:[A-za-z0-9]+

匹配英文、数字以及下划线(用户名):[A-Za-z0-9_]+

匹配中文字符:[\u4e00-\u9fa5]+

匹配全角字符:[\uFF00-\uFFFF]+

其他匹配某种内容的需求基本上都可以从以上几个正则表达式中略作修改即可。如果练习的话可以尝试实现以下需求:匹配中文、英文、数字以及下划线;匹配大写英文字母

匹配日期

匹配日期(年月日之间可以使用/、.或-进行间隔;月份和日期可以1位或2位):d{4}[/.-]\d{1,2}[/.-]\d{1,2}

匹配日期(年月日之间可以使用/、.或-进行间隔;月份需为1-12之间,是否补0均可;日期需在1-31之间,是否补0均可):\d{4}[/.-](1[0-2]|0?[1-9])[/.-](1[0-9]|2[0-9]|3[0-1]|0?[1-9])

如果需要对匹配日期的年份范围也进行设置,可以参考对月份、日期范围的显示方法进行修改。如果练习的话可以尝试实现:年份需要在1900年-2099年之间。

实际需求

网页解析相关

匹配网页注释:<!–(.*?)–>

匹配href属性中的值:(?<=[Hh][Rr][Ee][Ff] ?= ?")[^"]+(?=")

其他属性中的值也可以通过修改上式获得

匹配dd标签中的值(标签中不能有其他标签嵌套,dd标签可以有属性值):(?<=\<dd[^>]*\>)[^<]+(?=\</dd\>)

其他标签中的值也可以通过修改上式获得

其他

匹配空白行:\n\s*[\r\n]

匹配E-Mail地址:[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

匹配HTTP/HTTPS的Url:[Hh][Tt]{2}[Pp][Ss]?://[^\s]*

匹配腾讯QQ号:[1-9][0-9]{4,}

匹配身份证号:(\d{6})[12](\d{3})(\d{2})(\d{2})(\d{3})([0-9]|X)

匹配座机电话号码(000-00000000或0000-0000000):\d{3}-\d{8}|\d{4}-\d{7}

匹配3个以上连续的、相同的英文字母:([A-Za-z])\\1{3,}

匹配首尾空白字符(可以用来剔除行前、行后的空白字符):^\s*|\s*$

分类
leetcode

正则表达式(非常实用哦)(常用的正则表达式)

1 . 校验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2. 校验中文

字符串仅能是中文。

^[\\u4e00-\\u9fa5]{0,}$

3. 由数字、26个英文字母或下划线组成的字符串

^\\w+$

4. 校验E-Mail 地址

同密码一样,下面是E-mail地址合规性的正则检查语句。

[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?

5. 校验身份证号码

下面是身份证号码的正则校验。15 或 18位。

15位:

^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$

18位:

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

6. 校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7. 校验金额

金额校验,精确到2位小数。

^[0-9]+(.[0-9]{2})?$

8. 校验手机号

下面是国内 13、15、18开头的手机号正则表达式。

^(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}$

9. 判断IE的版本

IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。

^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$

10. 校验IP-v4地址

IP4 正则语句。

\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

11. 校验IP-v6地址

IP6 正则语句。

(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12. 检查URL的前缀

应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。

if (!s.match(/^[a-zA-Z]+:\\/\\//))
{
 s = 'http://' + s;
}

13. 提取URL链接

下面的这个表达式可以筛选出一段文本中的URL。

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

14. 文件路径及扩展名校验

验证文件路径和扩展名

^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$

15. 提取Color Hex Codes

有时需要抽取网页中的颜色代码,可以使用下面的表达式。

\\#([a-fA-F]|[0-9]){3,6}

16. 提取网页图片

假若你想提取网页中所有图片信息,可以利用下面的表达式。

\\< *[img][^\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*)

17. 提取页面超链接

提取html中的超链接。

(<a\\s*(?!.*\\brel=)[^>]*)(href="https?://)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>

18. 精炼CSS

通过下面的表达式,可以搜索相同属性值的CSS,从而达到精炼代码的目的。

^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}

19. 抽取注释

如果你需要移除HMTL中的注释,可以使用如下的表达式。

<!--(.*?)-->

20. 匹配HTML标签

通过下面的表达式可以匹配出HTML中的标签。

</?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)/?>

分类
leetcode

常用的正则表达式(正则表达式或怎么表示)

校验中文

字符串仅能是中文

^[\\u4e00-\\u9fa5]{0,}$

校验金额

金额校验,精确到2位小数

^[0-9]+(.[0-9]{2})?$

校验身份证号码

15位

^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$

18位

^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

校验日期时间

以yyyy-MM-dd格式的日期校验

^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))$

以yyyyMMddHHmmss格式的日期校验

^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9以以yyyy])([0-5][0-9])$

以yyyyMMdd格式的日期校验

^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))$

以HHmmss格式的时间校验

([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$

以HH-mm-ss格式的时间校验

([0-1]?[0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9])$

以yyyy-MM-dd HH:mm:ss格式的日期时间校验

^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$

校验Email地址

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

xml文件校验

^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

中国邮编校验

[1-9]\d{5}(?!\d)

域名校验

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

手机号码校验

^(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}$

电话号码校验

^($\d{3,4}-)|\d{3.4}-)?\d{7,8}$

分类
火山安卓源码

火山封装类库 正则表达式

火山封装类库 正则表达式

火山封装类库 正则表达式调用方式