正则表达式的写法

来源:互联网 发布:地板革淘宝网 编辑:程序博客网 时间:2024/05/22 07:55

在Python和Java中正则表达式的写法中的两个斜杠表示一个斜杠总是有些感觉不是那么清晰,昨天实验了下,发现要从下面的几个角度理解:

语言在处理的时候,先当成一个字符串,用字符串的语法去解析,解析好后,传给正则表达式引擎,按照正则表达式的语法去解析。

字符串解析引擎的语法比较简单,用斜杠表示转义,斜杠可以看做它的一个语法符号,‘\\’表示一个斜杠,'\t'表示tab,当然你也可以直接输入tab键来表示tab字符

正则表达式的语法是'\d'表示一个数字,‘\t'也表示tab,’\\‘ 表示一个斜杠,注意后两个和字符串的语法是一致的,这是特别要注意的地方。另外,在正则表示式中的一些特殊符号,例如'.', '|','?','+'等,如果要表示原始字符,那么必须加上转义,因为正则表达式中用到的符号较多,该语法扩展是任何符合前加斜杠都表示原符号,即使是正则表达中没有使用的符号,例如',',但是支持的完整的符号集合,目前还不太清楚。当然还有一些其他的语法,例如"\0dd"表示字符之类的,这个很容易在资料中查到。

所以正则表达式的"\\t“  "\t"  ”<tab>“ 是一样的,第一个利用正则表达式的语法讲\t解释为tab,第二个使用了字符串中的语法,解释为tab,第三个直接用原始的tab

python的raw语法实际是去除了字符串的语法,这样"\"就是一个原始的斜杠,无法用\t来表示tab了,只能输入字符,\n也类似,但是字符串的表达能力没有缺失,字符串中的斜杠语法只是为了简化书写而已。  正则表达式中的r”\t“还是表示tab,但是此时用了正则表达式中的语法了,特别注意,正则表达式的语法中包含了字符串的语法,这个容易引起人迷惑的地方。

java中没有raw特性,只能每次多写一个斜杠了。


在使用层面,Java 中Pattern就是单纯的规则,主要靠Matcher去实现各种匹配(主要靠find函数,注意该函数记录状态),结果直接从matcher中获取,matcher是有状态的。但是Python中Match Object就是一个单纯的匹配结果,是一个值对象,所有的匹配操作有Pattern Object完成(主要靠match和search函数),一个简化版是直接用re模块的函数(它比Pattern Object弱,例如search不能指定起始结束位置)

0 0
原创粉丝点击