正则表达式之前和之后的字符匹配
我目前正在使用正则表达式查找/我的文字编辑器中替换操作,SublimeText 3.正则表达式之前和之后的字符匹配
我已经有很多线路看起来像这样:
array(self::var1, self::var2, class::var_1, class::var_2, self::varCaps)
我想要做的是匹配数组中的每个项目。我唯一知道的是每个人都有::
字符在中间。
我可以匹配使用
[a-zA-z0-9\_\-]+(?=::)
//should match 'var1' in self::var1
很容易地使用
(?<=::)[a-zA-z0-9\_\-]+
//should match 'self::' in self::var1
的::
字符前的字符串,我也可以搭配::
字符后,我将如何结合这两点来创建一个表达式这匹配整个事情?
编辑:我的文本编辑器是SublimeText 3
你在你的模式有一个问题:[A-z]
范围相匹配的不仅仅是较低和大写字母(见[A-z] and [a-zA-Z] difference)更多。
要结合(?<=::)[a-zA-Z0-9_-]+
和[a-zA-Z0-9_-]+(?=::)
(注意转义与_
和-
是多余的),你可以使用[a-zA-Z0-9_-]+::[a-zA-Z0-9_-]+
(注意::
是不能避免,因为正则表达式无法匹配1个匹配操作不连续的文本匹配的部分)。
现在,[a-zA-Z0-9_]
与Sublime Text中的\w
不同,因为\w
也匹配所有Unicode字母和数字!如果您不介意,则可以使用\w+::\w+
。
另外,如果您想让-
仅在单词字符之间出现一次,请使用\w+(?:-\w+)*::\w+(?:-\w+)*
Unicode),或者您可以使用[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*::[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*
仅匹配ASCII字母/数字。
谢谢。很好的解释!不知何故,我把它放在我的头上,我必须在所有其他显然不正确的事情之前匹配'::'。 – KroniK907
难道你不能使用逗号分隔符?似乎更简单。 – mbroshi
什么是您的文本编辑器? Vim的?编辑器之间的正则表达式风格不同。 – kennytm
1)我可以使用这种情况下的逗号分隔符,但是我最终想要为SublimeText设置一个自定义命令,它将使用正则表达式快速匹配任何'string :: string2'。 2)我使用SublimeText 3作为我的编辑器。 – KroniK907