如何匹配{abc:(a*c)=》c }?
WHAT
Regular Expression,是用来查找特定字符串的规则的表达式。(这个表达式描述的是这个查找规则)
WHY
与通配符相比,能灵活准确地查找出特定的字符串。
HOW
"我要找一个 这样并这样 的东西,吧啦吧啦..."
从三个方面描述匹配规则(这样并这样):
- 位置
- 字符
- 数量
原图
“在什么位置查找多少数量的什么字符。”
使用正则表达式的语法来表达如是的语句,成矣。
1.正则表达式基本语法
位置
代码/语法 | 说明 |
---|---|
\b | word start or end |
^ | string start |
$ | string end |
零宽断言:
零宽度正预测 | 零宽度负回顾 | |
---|---|---|
先行断言 | (?=exp)someword | (?!=exp)someword |
(?=exp)someword:查找exp,且后面是someword | (?!=exp)someword:查找exp,且后面不是someword | |
后发断言 | (?<=exp)someword | (?!<=exp)someword |
(?<=exp)someword:查找exp,且前面是someword | (?!<=exp)someword:查找exp,且前面不是someword |
怎么理解(?<=\s)\d+(?=\s)最后的(?=\s)?
字符
代码/语法 | 说明 |
---|---|
. | any character |
\w | word num underline |
\s | blank |
\d | num |
[] | collection |
注意:大写字母与此相反,如\D表示不是数字。
数量
代码/语法 | 说明 |
---|---|
* | 0 or more |
+ | 1 or more |
? | 0 or at most 1 |
{n} | n |
{n,m} | between n and m include |
{n,} | n or more |
其他
mate character元字符
元字符代表一类:\d=[0-9];非元字符代表本身:()=>()。
分支条件 |
分组节()
(){1,3}:()里的部分重复1或3次。
向后引用
使用()可以指定一个子表达式,按从左至右的顺序会自动编号,0号是整个Sting。
- 组号分配过程。
- ?这里的分组是否与JavaScript中的match方法有联系
我们已经讨论了前两种语法。第三个(?:exp)不会改变正则表达式的处理方式,只是这样的组匹配的内容不会像前两种那样被捕获到某个组里面,也不会拥有组号。“我为什么会想要这样做?”——好问题,你觉得为什么呢?
误:两个文本的替换可以匹配具体的内容FP_&1_&2 ,其中&1和&2即可指定具体的替换位置
反义
大写和^。
贪婪与懒惰
尽可能匹配最长的String与竟可能匹配少String:
?的使用法。
在大量使用嵌套的字符中需要思量。(常见的便是HTML文件中的<>嵌套,常用的规则利用)
(?<=<(\w)>).*(?=<\/\1)
转义
反斜杠\就是转义