TA的每日心情 | 擦汗 2020-7-3 13:51 |
---|
签到天数: 19 天 [LV.4]偶尔看看III
|
楼主 |
发表于 2021-2-22 22:29:09
|
显示全部楼层
! W; x s9 c2 x" E5 y$ l9 N" S) w3 ~正则表达式只是一种规范,真正实现它可以有各种版本, 而这些版本可能有细微的差别。
8 x! a$ I- d& w; ?. h
9 o& k. m' i; o: O0 I就象每种编程语言的正则表达式的API类库对正则表达式的解读不100%相同一样,编辑器也有细微区别。比如,我刚刚发现NOTEPAD++在分组定义上是没有默认用\0分组表示字符串本身的,你必须加括号将原字符串括起来然后用\1分组来引用;而EmEditor则遵从标准的\0约定。
, S" i0 V, q1 b9 o9 v2 E# R" P8 _
% A( q2 v7 x1 r, s- S/ K[\s\S],[\d\D],[\w\W] 可表示任何字符这是最标准的写法,但也许EmEditor就不认为它们可以表示回车换行,或者干脆它可能就是该编辑器的一个BUG也有可能。
: ]' Z1 K3 m; j g+ B
+ b2 e+ r5 f+ r0 n# F我比较熟悉C#,它的正则API库很多函数可以指定一个参数RegexOptions 枚举作为选项来细化正则处理的要求,见:
& [* n2 W& q/ M: S9 X- @https://docs.microsoft.com/zh-cn ... ptions?view=net-5.0 c# f, g5 N4 x* e) [1 `' h+ f2 o
* \1 ^( |* n8 ]* i- }
虽然大家不一定会C#,但是这个网页上的信息很有价值,不同语言正则库和编辑器在正则表达式实现上的区别,往往就体现在这些细节上。有时这些林林总总的具体实现并不象C#这样给你选择,而是固化了某种实现细节而不容程序员设置更改,你除了观察它的规律适应它别无选择。
! p4 T( \; w& M, k/ n- ^# r |
|