正则表达式,很强大.捡起来,提高工作效率.
文章目录
基础语法:
普通字符-略
非打印字符-略
特殊字符
特殊字符 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。 |
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 . 。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。 |
{} | 一般是用来匹配的长度。比如\s{3}表示匹配三个空格,\s{1,3}表示匹配1到3个空格 |
[] | 定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字。[\s*] 表示空格或者*号 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’ 则匹配 “(”。 |
| | 指明两项之间的一个选择。要匹配 |
\d | 数字,等价[0-9] |
\s | 空格 |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。 |
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
定位符
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
选择-略
反向引用-略
具体的,参见
正则表达式语法
常用表达式
被检索的文本:(仅两行==两个换行符)
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz zyxwvutsrqponmlkjihgfedcba
19-09-30 19:37:30 [376.2][PLC][Send ][239] 68 EF 00 43 04 00 00 00 00 DC 00 00 95 31 71 37 6D 7B 34 47 BB 8A F1 01 00 02 00 D0 00 68 6D 7B 34 47 BB 8A 68 11 04 34 33 39 38 65 16 68 6D 7B 34 47 BB 8A 68 11 04 34 34 39 38 66 16 68 6D 7B 34 47 BB 8A 68 11 04 34 35 39 38 67 16 68 6D 7B 34 47 BB 8A 68 11 04 34 36 39 38 68 16 68 6D 7B 34 47 BB 8A 68 11 04 34 37 39 38 69 16 68 6D 7B 34 47 BB 8A 68 11 04 34 38 39 38 6A 16 68 6D 7B 34 47 BB 8A 68 11 04 34 39 39 38 6B 16 68 6D 7B 34 47 BB 8A 68 11 04 34 3A 39 38 6C 16 68 6D 7B 34 47 BB 8A 68 11 04 34 3B 39 38 6D 16 68 6D 7B 34 47 BB 8A 68 11 04 34 3C 39 38 6E 16 68 6D 7B 34 47 BB 8A 68 11 04 34 3D 39 38 6F 16 68 6D 7B 34 47 BB 8A 68 11 04 33 32 34 33 59 16 68 6D 7B 34 47 BB 8A 68 11 04 33 32 35 33 5A 16 9D 16
搜索指定字符开头,指定字符结尾
搜索"mn"开头,"xyz"结尾的可能.
mn.*?cba
结果:
共1处匹配.如下图.
.*? 组合解释
1、. 匹配任意除换行符“\n”外的字符;
2、*表示匹配前一个字符0次或无限次;
3、+或后跟?表示非贪婪匹配,即尽可能少的匹配,如?重复任意次,但尽可能少重复;
4、 .*? 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
如:a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab和ab。
搜索以指定字符开头(每行的开头),指定字符结尾(每行的结尾)
问题:如下三个正则表达式有何不同?
mn.*?cba$
^mn.*?cba
^mn.*?cba$
结论:
即正则表达式特殊字符^与$的含义.
分别对应,匹配输入字符串的开始位置与结束位置,详见本章节的第一部分(语法).
mn.*?cba$
cba必须是输入字符串的结尾字符串,位于中间部分也是无效的.
^mn.*?cba
mn必须是输入字符串的开始字符串,位于中间部分也是无效的.
^mn.*?cba$
mn必须是输入字符串的开始字符串,位于中间部分也是无效的.
同时,cba必须是输入字符串的结尾字符串,位于中间部分也是无效的.
检索的输入的字符串,是以换行符为单位的.
表达式1
mn.*?cba$
结果如下图,一处匹配.
表达式2
^mn.*?cba
未找到符合条件的字符串.
表达式3
^mn.*?cba$
结果依旧如上图,无匹配.
匹配数字
匹配3个数字
\d{3}
或者
[0-9][0-9][0-9]
匹配3-8个数字
\d{3,8}
查看检索"04 00 00 “开头,中间2个字符,” 00 DC"结尾
04 00 .. 00 00 DC
或者
04 00 \d{2} 00 00 DC
搜索特殊字符的关键字,需要转义字符.
需要检索如下图标记的关键字.
'[‘与’]'属于特殊字符,对于notepad工具.
dwAlmFlag2:\d{8}\[MPNo=33\]
最全的常用正则表达式大全
参见:
最全的常用正则表达式大全