|
本帖最后由 hilsonma 于 2019-11-20 00:24 编辑
分享一下我对regexp及正则表达式的理解
'.' 表示除了换行符以外的任何单字符。所以,'..'表示两个字符,'...'表示三个字符,以此类推。
为了更好的表示字符串长度,使用限定符,如'.{2}'表示2个字符,'.{3}'表示3个字符地,...,'.{n}'表示n个字符,n是个整数。
'.{2,}' 表示2个字符或者更多。'.{n,}'表示n个字符或者更多,n是个整数。
'.{2,5}' 表示最少2个字符,最多5个字符。'.{n,m}'表示最少n个字符,最多m个字符,n和m是整数。
'.?' 等价于'.{0,1}'表示0个或1个字符
'.*’等价于'.{0,}'表示0个字符或更多,因为不包括换行符,所以'.*'就表示一行文字。
'.+' 等价于'.{1,]'表示1个或更多字符。
以上表达的是任意字符,如果指定某个字符呢?
'u' 表示一个u
'u+' 表示1个或多个u
以此类推。
如果指定某些字符呢?
'[uA]' 表示一个u或一个A
'[uA]*' 表示0个到多个u或A,""或者"u"或者"A"或者"uuu"或者"AA"等等。
'[a-z]' 表示单个小写字母
'[A-Z]' 表示单个大写字母
'[0-9]' 表示单个数字
'[0-9]+' 表示多个数字
中括号表示一个字符,中括号里的内容表示这个字符的取值范围。
接下来理解定位符。
'^a' 表示开头的一个a
'a$' 表示结尾的一个a
'\ba' 表示单词开头的a
'a\b' 表示单词结尾的a
'\Ba'表示单词中间的a
再理解截取字符
'([a-zA-Z]*)' 表示从字母开始截取,一直到不是字母为止。
然后理解转义符
前面说了,'.'表示任意一个字符,'('表示截取字串的开始,如果要使用这些符号本身呢,这时要用到转义符'\'
'\.' 表示一个.
'.*\.'表示一行字符一直到最后一个.为止
'.*\.(.*)' 表示最后一个.前的内容都不要,要剩下的内容 (文件扩展名)。
最后理解选择符
'(\ba)|(a\b)' 表示单词开头的a或者单词结尾的a
==============================
总结一下:
限定符
{n} 前面的子表达式n次,n是非负整数
{n,} 前面的子表达式n次或更多,n是非负整数
{n,m} 前面的子表达式n次至m次,n和m是非负整数
? 等价于 {0,1} 或最小匹配
* 等价于 {0,}
+ 等价于 {1,}
定位符
^ 开头
$ 结尾
\b 单词边界
\B 非单词边界
其他特殊符号
. 除换行符之外的任何单字符
[ 取值范围开始
] 取值范围结束
( 截取字串开始
) 截取字串结束
| 两项之间的一个选择 (.*)|(.*)
\ 转义
字母a-zA-Z
数字0-9
下划线_
连字符-
==============================
再举些例子。
'^\(' 开头是(
'[0-9]' 单个数字
'[0-9]+' 多个数字
'\*' *字符本身
'abc$' 以abc结尾
'^[a-zA-Z0-9_-]{3,15}$' 只允许包含字母、数字、下划线、连字符,长度为3~15个字符 (用户名)
'^[0-9]+abc$' 以数字开头,并以abc结尾
'[1-9][0-9]*' 正整数(非0数字开始,后面任意多个数字)
'[1-9][0-9]?' 1-99
'\bCha' 单词开头的Cha
'ter\b' 单词结尾的ter
'.*/(.*)' 最后一个/前的内容都不要,要后面的 (文件名)
'.*\.(.*)' 最后一个.前的内容都不要,要后面的 (文件扩展名)
|
评分
-
查看全部评分
|