SublimeText3文件夹内的批量替换和正则表达式详解

在平时的工作我们需要对多个文件中的某些内容换为其他内容时,一个个修改其实是很费时费力的事情,而且这种事情也不应该浪费我们如此多的精力了时间,我们可用通过SublimeText3这个软件的批量替换功能来实现。
下面我们先来看看怎么使用SublimeText3的批量替换功能和正则表达式的概念了使用。

如何使用SublimeText3批量替换功能

1、菜单栏 文件-打开文件夹
《SublimeText3文件夹内的批量替换和正则表达式详解》

2、文件夹上右键,选择查找和替换
《SublimeText3文件夹内的批量替换和正则表达式详解》

《SublimeText3文件夹内的批量替换和正则表达式详解》

正则表达详解

什么是正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为”元字符”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。

普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

特殊字符

所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoob 中的 *,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 : runo*ob 匹配 runoob。

许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “\”,而 ‘(’ 则匹配 “(“。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 {。
| 指明两项之间的一个选择。要匹配|,请使用 \|。

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

上面已经介绍了* ,+ ,?,继续看一下后面三种

限定符 描述
{n} n 是一个非负整数。匹配确定的 n 次
{n,} n 是一个非负整数。至少匹配 n 次
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

定位符

定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。

定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

正则表达式的定位符有:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。在字符集中表示非[^abc]表示不匹配a,b,c三个字符
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个单词边界,即字与空格间的位置。
\B 非单词边界匹配。

注意:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

若要匹配一行文本开始处的文本,请在正则表达式的开始使用 ^ 字符。不要将 ^ 的这种用法与中括号表达式内的用法混淆。

若要匹配一行文本的结束处的文本,请在正则表达式的结束处使用 $ 字符。

所有元字符

《SublimeText3文件夹内的批量替换和正则表达式详解》

运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

运算符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,”或”操作字符具有高于替换运算符的优先级,使得”m | food”匹配”m”或”food”。若要匹配”mood”或”food”,请使用括号创建子表达式,从而产生”(m|f)ood”。

正则表达式例子

1、<H1>Chapter 1 - 介绍正则表达式</H1><H1>Chapter 1 - 介绍正则表达式</H1>

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

<.*>

字符串以<开头,中间.匹配任何单个字符,*单个字符出现0或者多次,以>结尾
匹配内容

<H1>Chapter 1 - 介绍正则表达式</H1><H1>Chapter 1 - 介绍正则表达式</H1>

(2)只匹配开始和结束 H1 标签,下面的非贪婪表达式只匹配 <H1></H1>

<.*?>

字符串以<开头,中间.匹配任何单个字符,*单个字符出现0或者多次,?表示<.*只出现0或者一次,以>结尾
?即表示>之前出现的<最多只有1次
(3)只匹配开始的 H1 标签

<\w+?>

\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]’。
\w不包括\,所以相比于上一个,没有了</H1>结束标签的匹配

2、匹配网址

http://www.runoob.com:80/html/html-tutorial.html

《SublimeText3文件夹内的批量替换和正则表达式详解》

结果:

http
www.runoob.com
:80
/html/html-tutorial.html
(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)

其中的$1表示第一括号子表达式匹配到的内容,$2,$依次类推
$0表示整个正则表达式匹配到的内容

3、边界符匹配重复字符

"Is is the cost of of gasoline going up up";

《SublimeText3文件夹内的批量替换和正则表达式详解》
结果:

Is the cost of gasoline going up

\1 指定第一个子匹配项
\b表示字符边界符

4、匹配标签对标记(不只是html标签)

<\s*(\S+)(\s)*>[\s\S]*<\s*\/\1\s*>

标签对一般为

<xx>dddddd</xx>

主要特点是左标签和右标签的元素一致,然后是大于号和小于号包起来

我们来分析一下以上的正则表达式

正则 分析
< 匹配以<开始
\s* 匹配任何空白字符,包括空格、制表符、换页符等0或者多次,比如< h1,空格换页制表符等不影响标签对的识别
(\S+) 匹配任何非空白字符1此或者多次,标签对必须有名字所以是1个字符以上
[\s\S]* 标签内的内容,一般来讲什么内容都ok
<\s\/\1\s> \1表示和第一个子匹配项一致

这个正则无法解决标签嵌套的问题,单独能够解决嵌套的正则不知道有没有,暂时没找到,可能需要语言的辅助来接解诀这个问题

参考

菜鸟教程正则表达式
正则匹配闭合HTML标签(支持嵌套)

点赞

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注