正则表达式简略
今天做多语言,需要将代码中的汉字找出来替换。百度了一下别人怎么做的,推荐正则:
^((?!(\*|//)).)+[\u4e00-\u9fa5]
后面的勉强还可以理解,可前面一对对的括号就看不懂了,((?!(\*|//)).)
跟天书一样。这里对上面的正则表达式进行拆解。
拆解步骤
一
(\*|//)
表示 \*
或者//
开头,代码中注释都是这么开始的
二
?!(\*|//)
,这里先理解一个概念:
前瞻:
exp1(?=exp2) 查找exp2前面的exp1
后顾:
(?<=exp2)exp1 查找exp2后面的exp1
负前瞻:
exp1(?!exp2) 查找后面不是exp2的exp1
负后顾:
(?<!=exp2)exp1 查找前面不是exp2的exp1
ok,上面的说明可以看出,我们用到的是 负前瞻,意思就是不是 \*
或者//
。
三
^
表示以后面的开头,则:
^((?!(\*|//)).)
,可以直白翻译成 以(不是\*或者//)开头的任意字符
四
^((?!(\*|//)).)+[\u4e00-\u9fa5]
表示查找非注释的代码内容中的汉字