我目前正在寻找在我的文本编辑器SublimeText 3中使用正则表达式进行查找/替换操作。
我所拥有的很多行看起来像这样:
array(self::var1, self::var2, class::var_1, class::var_2, self::varCaps)
我想要做的是匹配数组中的每个项目。我唯一知道的是每个人中间都有::
个字符。
我可以使用
轻松匹配::
字符前的字符串
(?<=::)[a-zA-z0-9\_\-]+
//should match 'self::' in self::var1
我也可以使用
在::
个字符后匹配
[a-zA-z0-9\_\-]+(?=::)
//should match 'var1' in self::var1
我如何组合这两件事来创建一个与整个事物相匹配的表达式?
编辑:我的文本编辑器是SublimeText 3
答案 0 :(得分:1)
您的模式存在问题:[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字母/数字。