Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex a-b,a-c而非a-a的正则表达式?_Regex - Fatal编程技术网

Regex a-b,a-c而非a-a的正则表达式?

Regex a-b,a-c而非a-a的正则表达式?,regex,Regex,我试图找到除构造函数之外的方法定义。 为了简化,我需要的是abc::def、foo::bar,而不是foo::foo 我已经知道如何写出这样的表达式: \w[\w\d_]+::\w[\w\d_]+ 但是如何确保::的左侧部分与右侧部分不匹配 顺便说一句,我无法检查限定方法名是否还有类型定义。我有一个非常老的项目,如果它是int,则不指定类型是可以的。注意,\w已经匹配了\d和\w[\w\d\u]+=\w{2,} 您可以捕获第一个“单词”(在::之前),并以否定的前瞻性检查:之后的“单词”是否与

我试图找到除构造函数之外的方法定义。 为了简化,我需要的是abc::def、foo::bar,而不是foo::foo

我已经知道如何写出这样的表达式:

\w[\w\d_]+::\w[\w\d_]+
但是如何确保::的左侧部分与右侧部分不匹配


顺便说一句,我无法检查限定方法名是否还有类型定义。我有一个非常老的项目,如果它是int,则不指定类型是可以的。

注意,
\w
已经匹配了
\d
\w[\w\d\u]+
=
\w{2,}

您可以捕获第一个“单词”(在
::
之前),并以否定的前瞻性检查
之后的“单词”是否与它不相等:

\b(\w+)::(?!\b\1\b)\w+\b

说明:

  • \b
    -前导词边界
  • (\w+)
    -第1组:一个或多个字母数字和下划线字符
  • -两个连续冒号
  • (?!\b\1\b)
    -下一个“单词”不能与组1中的值相同
  • \w+\b
    -一个或多个字母数字和下划线字符,后跟尾随单词边界
如果您不希望匹配1个字符的“单词”,可以使用

\b(\w{2,})::(?!\b\1\b)\w{2,}\b

您可以捕获第一个部分,并使用像这样的反向引用检查它是否重复

正则表达式:
\b(\w[\w\d\u]+):(?!\1)\w[\w\d\u]+

说明:

  • \b(\w[\w\d\]+)
    与第一部分匹配

  • (?!\1)
    第一部分的负前瞻。如果重复,整个比赛将被放弃

  • \w[\w\d\]+
    如果不重复,则此部分将匹配


您使用的是哪种方言和引擎?您可以使用
[\w\d\u]
=
\w
。另外,这也不匹配。@WiktorStribiżew:试图保持OP的模式不变。似乎应该至少有两个字符,第一个字符应该来自字符类
\w
。我应该得到澄清,非常感谢。如果可能的话,我会检查这两个答案是否有用。我喜欢你的是指向Regex101演示的链接。如果你想匹配
A::B
,请使用第一个regex。如果没有,请使用第二个。谢谢!我缺少的一点是将\1用作表达式的一部分。今天我确实学到了一些新东西。
\1
是对存储在内存缓冲区#1中的值的反向引用(使用第一个捕获组捕获。您可以阅读更多关于