正则表达式

是什么?

正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子。 其目的是对大量数据做过滤,很多场合都会用到。

比如: 筛选大量的email邮件,是否符合标准格式。

常使用缩写的术语"regex"或"regexp".


实例:

让用户名包含字符,数字,下划线和连字符

^[a-z0-9_-]{3,15}$

仅作为参观,后面详细解释各个字符的作用与常见的正则表达式。



1.基础匹配:    The    匹配    The , 一一对应完全匹配。

"The" => The fat cat sat on the mat.


2.元字符

正则表达式主要依赖于元字符. 元字符不代表他们本身的字面意思, 他们都有特殊的含义. 元字符写在方括号中有一些特殊的意思.

.    匹配任意单个字符,除了回车符
[] 匹配方括号内任意字符 
[^]匹配除方括号内的任意字符
*  匹配*号之前的字符,找到多个(大于等于0)重复的
+  匹配+号之前的字符,找到多个(大于等于1)重复的
?  标识?之前的字符可选
{n,m} 匹配num个字符,(n<num<m)
(xyz)  匹配与字符集xyz完全相对的字符串
|  匹配运算符前或者后的字符
\ 转义字符,用于匹配一些保留字符,如以上提到的字符[ ] ( ) { } . * + ? ^ $ \ |
^  从开始行开始匹配
$  从末端开始匹配

参考:

https://juejin.im/entry/59a651116fb9a024844938b5#1-%E5%9F%BA%E6%9C%AC%E5%8C%B9%E9%85%8D

一般来说 ^ 表示一个字符串的开头, 但它用在一个方括号的开头的时候, 它表示这个字符集是否定的. 例如, 表达式[^c]ar 匹配一个后面跟着ar的除了c的任意字符.

[^c]at 

例如表达式c.+t 匹配以首字母c开头以t结尾,中间跟着任意个字符的字符串.

c.+t 
a+t    匹配:  aaat  aat  at
(at)+t  匹配  atatll  atattt  aaatat


?

(at)+t?    匹配 at  att 


简写字符集

.  换行符外所有字符
\w  匹配所有字母数字 [a-zA-Z0-9]
\W 匹配所有非字母数字 [\w]
\d  匹配所以数字
\D  匹配所有非数字
\s  匹配所有空格
\S  匹配所有非空格 
正向向后约束 (?<=\$)[0-9\.]*. 这个表达式匹配 $ 开头, 之后跟着 0,1,2,3,4,5,6,7,8,9,. 这些字符可以出现大于等于 0 次.
(T|t)he(?=\sfat) 匹配 The 和 the, 在括号中我们又定义了前置约束(存在) (?=\sfat) ,即 The 和 the 后面紧跟着 (空格)fat
前置约束-排除 ?! 用于筛选所有匹配结果, 筛选条件为 其后不跟随着定义的格式 前置约束-排除 定义和 前置约束(存在) 一样, 区别就是 = 替换成 ! 也就是 (?!...).
后置约束-存在 记作(?<=...) 用于筛选所有匹配结果, 筛选条件为 其前跟随着定义的格式. 例如, 表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.
后置约束-排除 记作 (?<!...) 用于筛选所有匹配结果, 筛选条件为 其前不跟着定义的格式. 例如, 表达式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 The 或 the.
标志:  i 忽略大小写  g 全局搜索  m多行


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子. ...
    l_genius阅读 588评论 0 0
  • 写在最前面的话 最近在浏览Github Star榜时发现了关于学习正则表达式的介绍,感觉非常不错,可以边看边学边练...
    王诗翔阅读 2,614评论 1 21
  • 正则表达式 定义:正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子。 一...
    MinoyJet阅读 1,376评论 1 1
  • 正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子. 一个正则表达式是在一...
    小焲阅读 332评论 0 0
  • 允许的修饰符 有些修饰符能在所有允许的地方出现, 但并非所有的都这样. 通常, 影响 regex 编译的修饰符(...
    焉知非鱼阅读 1,373评论 0 1