正则表达式匹配i++与++i:新手遇到的匹配问题及解决需求
解决正则匹配
i++和++i的问题 嘿,我来帮你搞定这个正则匹配的坑!你之前遇到的问题其实是对正则语法的几个关键点理解错了,我一步步给你拆解:
先说说你之前写法的问题
为什么
[i+]不对?[i+]是字符类,它的作用是匹配单个字符:要么是小写i,要么是+。所以它会把文本里所有的i、+都单独匹配出来,完全达不到把i++或++i作为整体匹配的目的。为什么加了
\b反而更糟?\b是单词边界,它只在「单词字符(字母、数字、下划线)」和「非单词字符」之间生效。你写的\b[i+]\b还是字符类,只能匹配单个字符,而且只有当这个字符前后都是单词边界时才会命中——也就是只能匹配单独的i,根本带不动后面的++,因为+是非单词字符,i后面的+会触发单词边界,但你的正则只匹配到i就停了。
正确的正则表达式
要精准匹配i++和++i这两个整体,你需要用这个正则:
(?:i\+\+|\+\+i)
拆解一下这个正则的意思:
(?:...):这是非捕获组,用来把两个匹配规则打包在一起,不会额外生成捕获组(如果不需要捕获的话,用非捕获组更高效)i\+\+:匹配i++——这里的\+是转义后的+,因为+在正则里是特殊字符(表示匹配前面的字符至少一次),必须转义才能匹配字面意义的+|:逻辑「或」,表示要么匹配前面的i++,要么匹配后面的++i\+\+i:匹配++i,同样转义了两个+
测试你的示例文本
用你的测试文本:
This is what i++ is do ++i and in i I dim ++ +
这个正则会精准匹配到两个结果:i++和++i,不会碰单独的i、大写I、单独的++或者+,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Raghav Patnecha
相关产品推荐
相关产品推荐

