匹配字符前后的正则表达式
Regex to match before and after a character
我目前正在寻找在我的文本编辑器 SublimeText 3 中使用正则表达式进行 find/replace 操作。
我有很多行是这样的:
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
您的模式有问题:[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 aware)或者您可以使用 [a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*::[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*
仅匹配 ASCII letters/digits.
我目前正在寻找在我的文本编辑器 SublimeText 3 中使用正则表达式进行 find/replace 操作。
我有很多行是这样的:
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
您的模式有问题:[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 aware)或者您可以使用 [a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*::[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_])*
仅匹配 ASCII letters/digits.