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

正则表达式笔记

发布时间:2020-12-13 22:57:28 所属栏目:百科 来源:网络整理
导读:1.元字符: . 这个符号,意味着可以匹配任何一个字符 c.t 意味着匹配以c开头,之后是任意一个字符,紧跟着是t 这个符号,意味着可以忽略元字符,使得元字符的功能和普通字符一样 c.t 表示找到字母c,然后是一个句点".",紧跟着是t ct 表示找到字母c,然

1.元字符:
. 这个符号,意味着可以匹配任何一个字符
c.t 意味着匹配以c开头,之后是任意一个字符,紧跟着是t
这个符号,意味着可以忽略元字符,使得元字符的功能和普通字符一样
c.t表示找到字母c,然后是一个句点".",紧跟着是t
ct表示找到字母c,然后是反斜杆"",紧跟着是t


2.字符类:
字符类是一组在方括号内的字符,表示可以匹配其中的任何一个字符
c[aeiou]t表示以c开头,接着是aeiou中任何一个,紧跟着t
[a] 表示匹配单字符a
[a] 表示匹配字符串[a]
[[]ab]表示匹配的字符为[或者]或者a或者b (即只要出现[]ab任意一个即匹配上)
[[]] 表示匹配的字符为或者[或者] (即只要出现[]任意一个即匹配上)
[dabaaabcc]
[abc]是相同的,在字符类中,字符的重复和出现顺序并不重要。
[.]表示匹配一个全角句号


3.字符类的范围:
[b-f]
[b,c,d,e,f] 是相同的,表示匹配一个字符b或c或d或e或f (即只要出现一个即匹配上)
[a-z] 表示小写字母a到z (注意: a-z 表示以a开头,紧跟-,以z结尾)
[A-Z] 表示大写字母A到Z
[1-9] 表示非零数字
[0-9.,]表示匹配一个数字,或一个全角句号,或一个豆号
[0-9a-fA-F]表示匹配一个十六进制数
[a-zA-Z0-9-]表示匹配一个字母,或者数字,或者一个短横线-


4.字符类的反义:
[^a]表示匹配任何不是a的字符
[^a-zA-Z0-9]表示匹配任何不是字母也不是数字的字符
[^abc]表示匹配一个为^或者a或者b或者c的字符
[^^]表示匹配任何不为^的字符
[^c]ei表示匹配一个“不满足'在e之前有i,但没有c'的例子" ???


5.转义字符类:
d与[0-9]作用相同,表示匹配任何一个数字 (要匹配d,应该使用正则表达式d)
w与[0-9A-Za-z]作用相同,表示匹配一个数字或者字母
s表示匹配一个空字符(空格,制表符,回车,换行)


D 与[^0-9]相同
W与[^0-9A-Za-z]相同
S表示匹配一个非空字符
YYYY-MM-DD 表达可以为[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9],简化为dddd-dd-dd,最简为d{4}-d{2}-d{2}

6.指定重复次数范围:
x{4,4}与x{4}相同
colou{0,1}r表示匹配colour或者color
a{3,5} 表示匹配aaaaa或者aaaa或者aaa
注意,这样的正则表达式会优先匹配最长的字符串,比如输入I had an aaaaawful day
会匹配单词aaaaawful中的aaaaa,而不会匹配其中的aaa。
如果输入I had an aaawful daaaaay,那么在第一次匹配时,只能找到aaawful的aaa,
只有再次执行匹配时才能找到daaaaay中的aaaaa。
a{1,} 表示匹配一个或一个以上的连续字符a。
依然是匹配最长字符串,当找到第一个a之后,正则表达式会尝试匹配尽量多个连续字母a。
.{0,}表示匹配任意内容。无论你输入的文本是什么,即使是一个空字符串,这个正则表达式
都会成功匹配全文并返回结果。
".{0,}"表示匹配双引号,并且输入的字符串可能包含任意个字符。


7.重复的转义字符:
? {0,1}相同 colou?r与color{0,1}r相同
× {0,}相同 .*与.{0,}相同,表示匹配任意内容
+ {1,}相同 w+表示匹配一个词。(一个词表示由一个或者一个以上的字符组成的字符)
?*+ 表示匹配字符串"?*+"
[?*+]表示匹配一个?号或者一个*号或者一个+号
简化如下:
".{0,}" and "[^"]{0,}" ---> ".*" and "[^"]*"
x?x?x? ---> x{0,3}
y*y* ---> y*
z+z+z+z+ ---> z{4,}




8.非贪婪匹配:
".*"表示匹配一个双引号,然后匹配任意内容,然后匹配一个双引号。
注意,其中匹配任意内容也可以是双引号。通常情况下,这并不是很有用。
通常在句尾加上一个?号,可以使得字符串重复不再匹配最长字符。
".*?"表示匹配一个双引号,然后匹配最少的字符,然后是一个双引号。




9.选中匹配:
使用|来分隔,可以匹配不同的选择
cat|dog 表示匹配cat或者dog
red|blue
red||blue
|red|blue 表示匹配red或者blue或者一个空字符串
a|b|c 与[abc]相同
cat|dog|| 表示匹配cat或者dog或者一个分隔符|
[cat|dog]表示匹配a或者c或者t或者g或者o或者t或者|
简化:
s|t|u|v|w ---> [s-w]
aa|ab|ba|bb ---> [ab]{2}
[abc]|[^abc] ---> .
[^ab]|[^bc] ---> [^b] (实际上就是找交集,[^ab]和[^bc]的交集就是[^b])
[ab][ab][ab]?[ab]? ---> [ab]{2,4}




10.分组:
可以使用括号表示分组
Mon|Tues|Wednes|Thus|Fri|Satur|Sun)day 匹配一周中的某一天
(w*)ility与w*ility相同。都是匹配一个由"ility"结尾的单词。但(w*)ility更有效。
() 表示匹配一对括号
[()] 表示匹配任意一个左括号或一个右括号
(red|blue) 表示匹配red或者blue或者是一个空字符串 (分组可以包括空字符串)
abc()def 与abcdef相同
(red|blue)? 与(red|blue|)相同
w+(s+w+) 表示匹配一个或者多个由空格分隔的单词
简化:
w+W+w+W+w+ ---> w+(W+w+){2}
w+W+w+W+w+W+w+W+w+W+w+ ---> w+(W+w+){5}




11.单词分隔符:
单词分隔符本身并不是字符,它们的宽度为0.
输入文本it's a cat中,实际有八个单词分隔符。如果在cat之后再加上一个空格,那就有九个单词分隔符。
b 表示匹配一个单词单词分隔符
bwwwb 表示匹配一个三个字母单词
aba 表示匹配两个a中间有一个单词分隔符 (这个正则表达式永远不会有匹配的字符,无论输入怎样的文本)




12.换行符号:
换行符也不是字符,宽度为0。
^ 表示匹配行的开始位置
$ 表示匹配行的结束位置 (注意,一些实现中,用A和z作为文本的开始和借宿符号)
^& 表示匹配一个空行
^.*& 表示匹配全文内容,因为行的开始符号也是一个字符,“.”会匹配这个符号
找到单独的一行,可以使用^.*?$
^$ 表示匹配字符串"^$"
[$] 表示匹配一个$
[^] 表示匹配一个^




13.信用卡号1234 5678 8765 4321:
使用 d{16} 不够好, 正则表达式应该考虑到用户输入的空格和横短线

D*(dD*){16}


14.替换例子:
1).
在本例中,我们将使用 "W3School" 替换字符串中的 "Microsoft":

<script type="text/javascript">
var str="Visit Microsoft!"
document.write(str.replace(/Microsoft/,"W3School"))
</script>


2).
在本例中,我们将执行一次全局替换,每当 "Microsoft" 被找到,它就被替换为 "W3School":

<script type="text/javascript">
var str="Welcome to Microsoft! "
str=str + "We are proud to announce that Microsoft has "
str=str + "one of the largest Web Developers sites in the world."
document.write(str.replace(/Microsoft/g,"W3School"))
</script>


3).
您可以使用本例提供的代码来确保匹配字符串大写字符的正确:

text = "javascript Tutorial";
text.replace(/javascript/i,"JavaScript");

 

4). 在本例中,我们将把 "Doe,John" 转换为 "John Doe" 的形式: name = "Doe,John"; name.replace(/(w+)s*,s*(w+)/,"$2 $1"); 5). 在本例中,我们将把所有的花引号替换为直引号: name = '"a","b"'; name.replace(/"([^"]*)"/g,"'$1'"); 6). 在本例中,我们将把字符串中所有单词的首字母都转换为大写: name = 'aaa bbb ccc'; uw=name.replace(/bw+b/g,function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );

(编辑:李大同)

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

    推荐文章
      热点阅读