正则表达式的捕获组和细节
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
即作正则时,正则处理中会再转义一次,算上默认的作字符串时的转义,一共把你的输入转义两次。