正则表达式

1 篇文章 0 订阅
1 篇文章 0 订阅

学习一项技术,首先要了解它的作用,它能做什么

正则表达式作用:

1、测试验证字符串
例如,测试输入的字符串是不是整数,email等格式。
2、查找字符串
根据正则表达式查找到特定的字符串,删除或者替换该字符串。
3、提取字符串

正则表达式的符号

1、普通字符
包括可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
不可打印字符就是打印显示不出来的,比如,回车符、制表符、换行符等
2、元字符
下表是元字符及其说明

符号说明
\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n”匹配换行符。序列“\”匹配“\”,“(”匹配“(”。
/表示正则表达式的开始或结束,例如:/^\d*$/,正则表达式为两个斜杠之间的内容。
^匹配字符串开始的位置的元素
$匹配字符串结束的位置的元素
*匹配前面的字符或者子表达式0次或多次。例如:hel*o,匹配heo、helo、hello
+匹配前面的字符或者子表达式1次或多次。例如:zo+,匹配zo、zoo
?匹配前面的字符或者子表达式0次或1次。例如:se*d,匹配sd、sed
{n}匹配前面的字符n次。例如:o{2}与food中的两个’o’匹配,不与bob中的’o’匹配
{n,}匹配前面的字符至少n次
{n,m}匹配前面的字符,至少 n 次,至多 m 次。例如:o{1,3}匹配boooob中的前3个o,o{0,1}匹配头一个o。注意:您不能将空格插入逗号和数字之间。
?当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o”。
.匹配除’\n’以外的任何单个字符。
x|y匹配x或者y,例如:z|foo匹配’z’或者’foo’,’(z|f)oo’匹配’zoo’或者’foo’。
[xyz]匹配包含的任一字符,例如:[abc]匹配’play’中的’a’。
[^xyz]匹配除xyz以外的任一字符,例如:[^abc]匹配’play’中的’p’,’l’,’y’。
[a-z]字符范围,例如:[a-z]匹配’a’到’z’这个范围内的任一小写字符。
[^a-z]反向字符范围,[^a-z]匹配’a’到’z’这个范围外的任一小写字符。
\b匹配一个字边界,即字与空格的位置,例如:er\b匹配’ever’中的’er’,er\b不匹配’every’中的’er’。
\B非字边界匹配,例如:er\B匹配’every’中的’er’。
\d匹配任一数字,等价与[0-9]
\D匹配任一非数字,等价与[^0-9]
\w匹配任一字类字符,包括下划线,等价与[a-zA-Z0-9_]
\W匹配任一非字类字符,等价与[^a-zA-Z0-9_]
\s匹配任一空白字符,包括空格、制表符、换页符等。与 [\f\n\r\t\v] 等效。
\S匹配任一非空白字符,与 [^\f\n\r\t\v] 等效。
\f匹配换页符
\n匹配换行符
\r匹配回车符
\t匹配水平制表符
\v匹配垂直制表符
(pattern)匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果“匹配”集合中检索捕获的匹配。
(?:pattern)匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配
(?=pattern)执行正向预测先行搜索的子表达式,通俗点将就是匹配到pattern后,继续向前找,如果这个后面跟着这个pattern格式,就把前面的那个字符拿出来,pattern中的内容不算匹配到的字符,例如:例如,’Windows (?=95|98|NT|2000)’ 匹配“Windows 2000”中的“Windows”,但不匹配“Windows 3.1”中的“Windows”。
(?!pattern)和上面的正好相反

优先级顺序

正则表达式从左到右进行计算,相同优先级的从左到右进行运算,不同优先级的运算先高后低。下面从高到低列出各种运算符的优先级顺序

符号说明
‘\’转义字符
(),(?:),[]括号,中括号
*,+,?,{n},{n,},{n,m}限定符
元字符,普通字符任何元字符,普通字符
‘|’替换,’或’操作

示例

英文句点字符匹配(.): . 匹配除\n以外的任何单个字符

举例1:abcd,asfd,axyd可以使用/^a.*d$/来匹配

举例2:假如要匹配.,则需要转义,file.txt可以使用/file.txt/来匹配

中括号表达式[]:[]中可以放入一个或多个字符,但是只匹配里面的一个字符

举例:/chapter [1234]/匹配chapter 1、chapter 2,不匹配chapter 12,只能匹配出chapter 1,要想匹

配完整的chapter 12,使用/chapter [1234]+/

chapter [1234]也可以使用范围表达式来表示,例如:/chapter [1-4]/等价于/chapter [1234]/

如果想在中括号中包括连字符,使用/[-]/,使用反斜杠转义,也可以放在开始或结尾的位置[-a-z]、[a-z-]

限定符:*、+、?、{n}、{n,}、{n,m}
举例:/chapter [1-9][0-9]*/ 匹配任何位数的章节;/chapter [1-9][0-9]?/匹配1-99的章节

*、+ 和 ? 限定符都被称为“贪心的”,因为它们匹配尽可能多的文本。但是,有时只需要最小的匹配。怎

么办,在这些字符后加?号即可解决

例如,您可能搜索 HTML 文档,以查找括在 H1 标记内的章节标题。该文本在您的文档中如下:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始小于符号 (<) 到关闭 H1 标记的大于符号 (>) 之间的所有内容。

/<.*>/匹配整段内容

如果您只需要匹配开始 H1 标记,下面的“非贪心”表达式只匹配

/<.*?>/只匹配

<H1>

通过在 *、+ 或 ? 限定符之后放置 ?,该表达式从“贪心”表达式转换为“非贪心”表达式或者最小匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值