正则表达式速攻1/2

这是什么

正则表达式的目标是为了匹配字符串,可以理解为Ctrl+F的威力加强版

常用的情形是匹配大小写拉丁字母,数字和部分特殊符号

除此以外的情形,比如汉字,假名,彦文,西里尔字母,阿拉伯字母等需要使用unicode专用代码进行判断

使用的匹配方式是从左到右顺序匹配

修饰符

正则表达式的一般格式为:

/表达式/修饰符

一个正则表达式中只会出现**一次**修饰符,修饰符一共有4个,分别是gims
g 查找所有的匹配项,缺省时表示查找第一次匹配
i 表示不区分大小写
m和s都是根据换行符而言
m 表示多行匹配,也就是说原本用来匹配字符串开头和结尾的^和$现在以换行符为基准,匹配每一行的开头和结尾
s 表示.可以匹配换行符,而原本的.是不包括换行符的

表达式

/表达式/修饰符  表达式就是要匹配的对象

表达式的内容有两种,子表达式和限制符,子表达式就是用来匹配的文本,可以是abc,ABC,123,甚至特殊符号和使用unicode表达的字符等。但是有时候单单有匹配文本是不足以筛选出所有自己想要的内容,比如我要选中所有表示苹果(apple)的词条,但是文中时而写apple时而写apples,分两次选中就很麻烦,如果情况更多更复杂的话光有匹配文本就不够了,这时候就需要修饰符。修饰符紧跟在前一个匹配文本后面,形容这个文本出现的次数。

所以就可以写成apples?表示从a开始到e为止,我要匹配到完整的apple这个文本,而s因为跟了一个修饰符,?的意思是要么出现一次要么不出现,那么就会匹配到apple和apples两种文本了。

子表达式

子表达式也有两种,一种是字符,一种是组合

字符的情况就如上文所说,只要是能够打出来的东西都可以用来作为匹配的文本,但是要注意修饰符是不能够直接作为匹配文本,而要加\进行转义

如果\加上了特殊符号,就会把特殊符号转义成匹配的文本,如果\加上了可以被匹配的文本,反而会被识别为特殊的含义,比如\s表示空格,常用的有:

\s  空格

\w 文字,a-z,A-Z,0-9都属于

\d 数字

\r 回车

\n 换行

组合

如上述所说的例子,如果我要匹配的不只是apple,还想匹配app的话,就要把le看做一个整体,要么不出现,要么出现一次

app(le)?

如果还想要匹配appe,appl,app的话,原本应该写成

appl?e?

实际上也可以把l和e用或符号|分割开,也就是app(l|e)?

常用

.
匹配除了换行符之外的所有字符

[abc]
匹配a,b和c,中括号中的字符都是并列关系

[^abc]
匹配除了a,b,c以外的值

[a-z] 或者 [A-Z] 或者 [0-9] 或者 [a-zA-Z0-9] 等等

[^a-z]
匹配除了a-z以外的值



将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

^
匹配字符串的开始位置

*
前一个子表达式出现任意次,0,1,2,3……

+
前一个子表达式出现至少一次,1,2,3……


前一个子表达式最多出现1次,0或者1
但是,如果跟在限制符后面的话就表示非贪婪模式匹配,也就是说哪怕后面有许多符合子表达式的字符可以被匹配,但是也只匹配最小值,0或者1
```

```
{n}
前一个子表达式出现了确定的n次

{n,}
前一个子表达式至少出现了n次

{n,m}
前一个子表达式出现的次数在n和m之间
```

你可能感兴趣的:(正则,linux,正则表达式)