简单认识一下正则表达式
1,正则表达式是什么
正则表达式几乎再每一种语言中都会用到,是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
它的逻辑性很强,但是功能十分强大,我们下面来介绍一下基础知识和用法:
2,正则中的基本概念
元字符 | 描述 |
---|---|
. | 句号匹配任意单个字符除了换行符。 |
[ ] | 字符种类。匹配方括号内的任意字符。 |
[^ ] | 否定的字符种类。匹配除了方括号里的任意字符 |
* | 匹配>=0个重复的在*号之前的字符。 |
+ | 匹配>=1个重复的+号前的字符。 |
? | 标记?之前的字符为可选. |
{n,m} | 匹配num个大括号之前的字符或字符集 (n <= num <= m). |
(xyz) | 字符集,匹配与 xyz 完全相等的字符串. |
| | 或运算符,匹配符号前或后的字符. |
\ | 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | |
^ | 从开始行开始匹配. |
$ | 从末端开始匹配. |
这些都是最基本的用法,我们下面来一一实验 :
-
字符集也叫做字符类。[]用来指定一个字符集。 在方括号中使用连字符来指定字符集的范围。 在方括号中的字符集不关心顺序。 例如,表达式
[Tt]he
匹配the
和The
,也可以[a-z]一样指定一个范围 -
否定字符集^,一般来说
^
表示一个字符串的开头,但它用在一个方括号的开头的时候,它表示这个字符集是否定的。
-
重复次数,后面跟着元字符
+
,*
,?
的,可以用来指定匹配子模式的次数,也可以指定一个范围如:{2-5}次 -
特征标群():就是将()内的字符看做是一个整体。我们也可以用
|
(或者)来进一步挑选。 -
转码特殊字符:反斜线
\
在表达式中用于转码紧跟其后的字符。用于指定{ } [ ] / \ + * . $ ^ | ?
这些特殊字符。如果想要匹配这些特殊字符则要在其前面加上反斜线\
-
锚点:在正则表达式中,想要匹配指定开头或结尾的字符串就要使用到锚点。
^
指定开头,$
指定结尾。
若为a?则匹配第二个
-
简写字符集,正则中有一些常用字符集的简写
正则表达式提供一些常用的字符集简写。如下:
简写 描述 . 除换行符外的所有字符 \w 匹配所有字母数字,等同于 [a-zA-Z0-9_]
\W 匹配所有非字母数字,即符号,等同于: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符 \n 匹配一个换行符 \r 匹配一个回车符 \t 匹配一个制表符 \v 匹配一个垂直制表符 \p 匹配 CR/LF(等同于 \r\n
),用来匹配 DOS 行终止符
最后我们来简单介绍正则中的一个重要概念:贪婪匹配和懒惰匹配
-
贪婪匹配就是尽可能多的包含字符串
-
懒惰匹配就是近可能少包含字符串(方法是在搜索后面加个?)
贪婪匹配:(.*)
懒惰匹配:(.*?)
参考链接
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md