我尝试查找除构造函数之外的方法定义。 为了简化我寻找 abc :: def,foo :: bar而不是foo :: foo
我已经知道如何写一个这样的表达式:
\w[\w\d_]+::\w[\w\d_]+
但是如何确保:: 不的左侧部分与正确的部分相匹配?
顺便说一句,我无法检查合格方法名称是否还有类型定义。我有一个非常古老的项目,如果它是int,则不指定类型。
答案 0 :(得分:2)
请注意,\w
已匹配\d
和_
以及\w[\w\d_]+
= \w{2,}
。
您可以捕获第一个“单词”(::
之前)并使用否定前瞻检查::
之后的“单词”不等于它:
\b(\w+)::(?!\b\1\b)\w+\b
请参阅regex demo
说明:
\b
- 领先的字边界(\w+)
- 第1组:一个或多个字母数字和下划线字符::
- 连续2次冒号(?!\b\1\b)
- 下一个“字”不能与第1组中的值\w+\b
- 一个或多个字母数字和下划线字符,后跟一个尾随字边界。如果您不想匹配单字“单词”,可以使用
\b(\w{2,})::(?!\b\1\b)\w{2,}\b
答案 1 :(得分:1)
您可以使用这样的反向引用捕获第一部分并检查它是否重复。
正则表达式: \b(\w[\w\d_]+)::(?!\1)\w[\w\d_]+
说明:
\b(\w[\w\d_]+)
与第一部分匹配。
(?!\1)
否定前瞻。如果重复的整个匹配将被丢弃。
\w[\w\d_]+
如果不重复,则此部分将匹配。