正则表达式简介

正则表达式30分钟入门教程
https://deerchao.cn/tutorials/regex/regex.htm

一、正则元字符

是一些在正则表达式中有特殊用途、不代表它本身字符意义的一组字符。

1、 字符元字符

  • […] :配列表中的任意字符
  • [^…] :配不在列表中的任意字符
  • . :配除了回车和换行符之外的任何字符
  • \w :元符号,相当于[a-zA-Z0-9_],匹配任何字母、数字、下划线字符,这样的字符也称为单词字符
  • \W :元符号,相当于[^a-zA-Z0-9_],匹配除了字母、数字、下划线字符之外的任何字符
  • \d :元符号,相当于[0-9],匹配任何单个的数字字符
  • \D :元符号,相当于[^0-9],匹配除了数字之外的任何单个字符
  • \s :元符号,匹配空白字符,空白字符是指空格、Tab字符和回车换行符
  • \S :元字符,匹配任何非空白字符

2、重复元字符(量词)

  • x? :匹配0个或1个x。
  • x+ :匹配1个或多个x。
  • x* :匹配0个或多个x。
  • x{n} :匹配n个x。
  • x{n,} :匹配n个或多个x。
  • x{n,m} :匹配n到m个x。

3、定位元字符

  • ^ :匹配必须出现在字符串的开头或行的开头(开头)
  • $ :匹配必须出现在以下位置:字符串结尾、字符串结尾处的 \n 之前或行的结尾。(结尾)
  • \b :匹配单词的开始或结束
  • \B :匹配非单词的开始或结束
  • x(?=y) :正向肯定预查。只有在x后面跟上y时,才匹配x成功。(正向等=)
  • x(?!y) :正向否定预查。只有在x后面不跟着y时,才匹配x成功。 (正向不等!)
  • (?<=x)y:反向肯定预查。只有在y前面跟x时,才匹配y 成功。Javascript不支持。(反向等,为在正向等前加<)
  • (?<!x)y: 反向否定预查。只有在y前面不跟x时,才匹配y 成功。Javascript不支持。(反向不等,为在正向等前加<)

4、分组和替换字符

  • x|y :匹配x或y
  • (sub) :反向引用,将子表达式sub作为一个整体处理,括号的作用相当于代数中括号的作用。并将捕获的子匹配保存在\1,\2,......和$1,$2,......中。例如:/a(bc)+/中,加号元字符作用在子表达式bc上,它匹配abc、abcbc,但是不匹配a和ac
  • (?:sub) :分组子模式,但是不捕获子模式。它的作用与(sub)类似,称为无记忆匹配
  • \1,\2,\3,... :在正则表达式中,分别包含与正则表达式中第一个反向引用、第二个反向引用、第三个反向引用...相匹配的子串
  • $1,$2,$3,... :在替换中,分别包含与正则表达式中第一个反向引用、第二个反向引用。第三个反向引用...相匹配的子串

5、特殊字符

特殊字符是指那些不容易进行直接书面表达或不容易直接使用键盘输入的字符。

  • \0 :匹配null字符,对应的十六进制值为\x00
  • \b :匹配退格字符,对应的十六进制值为\x08
  • \n :匹配换行字符,对应的十六进制值为\x0A
  • \r :匹配回车字符,对应的十六进制值为\x0D
  • \f :匹配换页字符,对应的十六进制值为\x0C
  • \t :匹配制表(TAB)字符,同时对应于水平制表符\x09和垂直制表符\x0B
  • \xhh :匹配用2个十六进制数字表示的字符
  • \uhhhh :匹配用4个十六进制在数字表示的字符,这些字符是Unicode字符。[\u4e00-\u9fa5] 匹配任意一个汉字
  • \cchar :匹配命名的控制字符

6、需要转义的字符

. * + ( ) $ / \ ? [ ] ^ { } - ! < >

7、贪婪与非贪婪匹配

  • 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
    如使用模式 "ab.*c" 匹配字符串"abcaxc";,结果就是匹配到:abcaxc。
  • 非贪婪匹配:就是匹配到结果就好,就少的匹配字符。
    如使用模式 "ab.*?c" 匹配字符串"abcaxc",结果就是匹配到:abc。

默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。如:*?

8、常见正则表达式

[1-9]?[0-9]|100 :匹配0-100的数字

\n[\s| ]*\r :匹配空行的正则表达式

二、正则表达式应用举例

1、验证表达式

只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。或…^[\W]$
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$" 正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入中文汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$" 正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
验证全角字符: “^\uFF00-\uFFFF”
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配IP地址的正则表达式: (\d+)\.(\d+)\.(\d+)\.(\d+)

vs中批量操作

(按ctrl+H 选上正则表达式)

  • 删除注释 ://.* 替换为空。
  • 删除空行:^\s*\n 替换成空。

三、文件夹中的文件内容正则批量替换

1、使用VSCode文件替换(使用JS引擎)

在VSCode中,使用正则表达式,将网页中的font元素批量更换成font元素

<font (.*?")>((\n|.)*?)</font>

替换成:

<span $1>$2</span>

image_thumb1_thumb

2、文件夹中的文件内容正则批量替换

下载小工具:ReplaceAll

 

posted on 2020-07-24 16:03  springsnow  阅读(60)  评论(0编辑  收藏

导航