正则表达式前瞻,后顾,负前瞻,负后顾 语法参考
程序员文章站
2022-06-08 08:45:33
...
每次使用正则表达式的前瞻,后顾,都要查手册。我绝对不会去背这玩意儿的。 没手册就要上网查,而且中文的网站根本查不到。我自己撰写一份,以后直接上自己的网站上就能查到了。
前瞻 lookahead (?=在这里编写内容)
后顾 lookbehind (?<=在这里编写内容)
负前瞻 negative lookahead (?!在这里编写内容)
负后顾 negative lookbehind (?<!在这里编写内容)
前瞻和后顾合称瞻前顾后、左顾右盼、东张西望 lookaround
后顾功能在大多数语言中有长度限制,而且只能使用定长的表达式,像\w+和\d?这样的表达式长度可变,用在后顾功能中属于语法错误,实际上不是语法错误,是正则表达式本身太扯淡,软件没实现这个功能,不让你用罢了。
Java对后顾功能的支持度,可以用?符号了,不能用+号,因为+号实在太扯淡,能匹配一个字符,也能匹配一万个字符,人家Sun公司的码农根本实现不出来,所以不给你提供这个功能。
.NET对后顾功能的支持度最高,可以匹配可变长度字符,可以用+号了,不愧是世界首富比尔盖茨微软,多砸钱,不信有实现不出来的功能。
总之,使用后顾的时候小心,不要写得天花乱坠,啥符号都往里塞。
Mastering Regular Expressions 3rd Edition 书中截图(见附件):
前瞻 lookahead (?=在这里编写内容)
后顾 lookbehind (?<=在这里编写内容)
负前瞻 negative lookahead (?!在这里编写内容)
负后顾 negative lookbehind (?<!在这里编写内容)
前瞻和后顾合称瞻前顾后、左顾右盼、东张西望 lookaround
后顾功能在大多数语言中有长度限制,而且只能使用定长的表达式,像\w+和\d?这样的表达式长度可变,用在后顾功能中属于语法错误,实际上不是语法错误,是正则表达式本身太扯淡,软件没实现这个功能,不让你用罢了。
Java对后顾功能的支持度,可以用?符号了,不能用+号,因为+号实在太扯淡,能匹配一个字符,也能匹配一万个字符,人家Sun公司的码农根本实现不出来,所以不给你提供这个功能。
.NET对后顾功能的支持度最高,可以匹配可变长度字符,可以用+号了,不愧是世界首富比尔盖茨微软,多砸钱,不信有实现不出来的功能。
总之,使用后顾的时候小心,不要写得天花乱坠,啥符号都往里塞。
Mastering Regular Expressions 3rd Edition 书中截图(见附件):