正则表达式的捕获组和细节

2018-03-16  本文已影响0人  codeflame

通用的:

如"((a)(b)) c":引用捕获语法:用反斜杠+第几捕获,0是整个结果,括号的捕获从1开始算,顺序以左括号顺序为准,上面中 \0=abc,\1=ab,\2=a,\3=b
因此如"(a)(b)\1\1\2" 将匹配"abaab"

前瞻后顾:

前瞻:"ab(?=c)",匹配abcd中的ab,不匹配abd中的ab。c不被匹配,只是要求匹配的ab后面必须是c
负前瞻:"ab(?!c)",类似。要求匹配的ab后面不能有c,即与上面相反
后顾:"(?<=c)ab",类似。要求ab前有c
负后顾:"(?<!c)ab",类似。要求ab前没有c

私货:

visual studio/visual studio code的ctrl+h替换中,若替换内容使用捕获组,用美元符号'$'代替反斜杠''。其次,它不支持后顾,只有前瞻

转义问题:

你的书写         运行时          当作正则时
\n              换行符            换行符
\\n             \n               换行符
\\\\n           \\n              \n

即作正则时,正则处理中会再转义一次,算上默认的作字符串时的转义,一共把你的输入转义两次。

上一篇下一篇

猜你喜欢

热点阅读