加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式的基本知识

发布时间:2020-12-13 19:39:34 所属栏目:百科 来源:网络整理
导读:一 正则表达式组成部分!! 例: "/imgs*src=".*?"//iu" 和 "#imgs*src=".*?"/#iu" 1.定界符 / / 除了字符、数字和反斜线"" 以外的任何字符都可以为定界符. ”| |“ "{ }"等都可以. 一般我们用"/ /". 2.原子 img s 注意: 原子是正则最基本的组成

一 正则表达式组成部分!!

例: "/&;imgs*src=".*?"/&;/iu" 和 "#&;imgs*src=".*?"/&;#iu"

1.定界符 / /

除了字符、数字和反斜线"" 以外的任何字符都可以为定界符. ”| |“ "{ }"等都可以. 一般我们用"/ /".

2.原子 img s

注意: 原子是正则最基本的组成单位.每个正则表达式必须至少有一个原子,只要一个字符可以在正则表达式里单独出现他就是一个原子!

注意: 反斜杠""可以把有意义的字符转换成无意义的字符输出.也可以吧无意义的字符转化成有意义的输出

1.原子包括 打印和非打印字符.

2.如果有意义的字符想作为原子使用统统使用转义字符""来转意. (如: *.?&;&;( ) )

3.在正则表达式中可以直接使用一些代表范围的原子!

d : 表示任意一个十进制的数字! 等于 [0-9]

D :表示任意一个除数字之外的字符! 等于 [^0-9]

s :表示任意一个空白字符! 等于 [nrtf]

S :表示任何一个非空白字符! 等于 [^nrtf]

w :表示任何一个字! a-z A-Z 0-9 _ 等于 [a-zA-Z_]

W :表示任何一个非字! (除了 a-z A-Z 0-9 _之外的字符) 等于 [^a-zA-Z_]

4.自己定义原子表用[] . 如:[13579]

/[13579]/ 和 /13579/ 两个表达式的区别是:后者表达的是一个整体13579 前者表达的是一个结合1、3、5、7、9

/[1-9p-z]/ 表示范围充1到9p-z

[^] 表示取反的意思. /[^abc]/ 除了字符abc意外其它都可以.^必须在方括号里面第一位

3.元字符 * ?

元字符是用来修饰原子的,所以不能单独出现!!如果想输出元字符本身用转义字符""

* :表示前面的原子可以出现 0次 1次 或多次

+ :表示前面的原子可以出现一次或多次 .即至少要有一个原子.

? :表示前面的原子可以出现一次或0次,不能是多次.

. :默认情况下表示除换行符外任意一个字符!

^ :如果"^"在正则表达式的第一个字符出现,表示匹配的字符串必须以^字符后面的字符开始.

例子/^abc/匹配以abc开头的字符串!

$ :如果"$"在正则表达式的最后个字符出现,表示匹配的字符串必须以$字符前面的字符开始.

例: /abc$/ 匹配的字符必须以abc结尾!

例子: /^abc$/ 这个匹配的仅仅是abc这三个字符!

/^abc .*abc$/ 表示匹配一abc开头以abc结尾的字符串.

| :表示或的关系!

例:/abc|123/ 或的优先级别最低是最后考虑的,所以正则匹配的字符串要有abc或123,而不是c或1.

{} :{5}前面的原子可以出现5次. {m,n} 前面的原子出现的次数大于m次小于n次. {m,}表示前面的原子出现的次数大于m次. (m,n是整数且m<n)

b :表示一个边界! 语言不好表达看个例子吧!

例: 用正则/bisb/ 匹配字符串"this is island" 匹配出的结果是"is",因为is的两边都有边界!

B :表示一个非边界! 同样看这个例子

例: 用正则/bisB/ 匹配字符串"this is island"匹配的结果是"island" 因为左边有边界右边有"land"字符串.

() :重点啊!! 作用举例说明!

作用1: ()里面的多个原子做为一个大原子使用.

例:/(abc)+/ 和 /abc+/ 区别是前者可以匹配出含有多个"abc"的字符串!()把abc当作了一个大原子. 后者可以匹配出类似于"abccc"这样的字符串,ab后面可以有一个或多个c.

作用2:改变匹配的优先级!

例: /do(g|c)at/ 和 /dog|cat/ 前者可以匹配出dogat 或 docat 后者匹配的是dog或cat,()改变了| 的优先级!

作用3:作为子模式使用.如果正则表达式有子模式,正则表达式在进行全部匹配后会对每个子模式也进行匹配.全部匹配作为一个大模式放到数组的第一个元素中,每个()是一个子模式安顺序放到数组的其它元素中去.

例: 用 正则 "/(d{4}wd{2}wd{2})s+d{2}wd{2}wd{2}s+[am|pm]/" 匹配字符串"today is 2012-09-23 12:22:11 pm" 中的日期时间. 会匹配出 全模式"2012-09-23 12:22:11 pm" 和 子模式 "2012-09-23" .

了解: "" 优先级第一 "()"优先级第二 "* + ? {}"优先级第三 "^ $ b"优先级第四 ....... "|"优先级最后!


4.模式修正符 ( i 这个则匹配是不区分大小写. m 将要被匹配的字符串不当作一行进行匹配! 默认情况将字符串当作一行. s 将要匹配的字符串当作一行! x 忽略正则里面的空格.)

位置:在定界符"/ /"的后面

作用:对整个正则表达式调优用的,

/abc/ 和 /abc/i 前者只能匹配abc 后者可以匹配abc ABC Abc 等..

这个功能挺多的自己查找吧....

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读