Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Java 正则表达式:量化非捕获组_Java_Regex - Fatal编程技术网

Java 正则表达式:量化非捕获组

Java 正则表达式:量化非捕获组,java,regex,Java,Regex,请参阅,了解我正在尝试做的一些背景知识。简而言之,我想匹配/path/foo/下的任何路径,除非叶目录(不是叶文件)是脚本 在这个问题上有一些答案似乎是有效的,但我试图找出为什么我尝试的某个解决方案不起作用。正则表达式如下所示: ^/path/foo(?:/[^/]+)*(?!/script)/[^/]*$ 无可否认,我对这一点的有限理解如下: 文本字符串/path/foo 子匹配出现的任意次数/[^/]+。基本上,0个或更多重复模式的/,后跟一些目录名(我知道文件路径中存在空格或特殊字符的问

请参阅,了解我正在尝试做的一些背景知识。简而言之,我想匹配
/path/foo/
下的任何路径,除非叶目录(不是叶文件)是
脚本

在这个问题上有一些答案似乎是有效的,但我试图找出为什么我尝试的某个解决方案不起作用。正则表达式如下所示:

^/path/foo(?:/[^/]+)*(?!/script)/[^/]*$
无可否认,我对这一点的有限理解如下:

  • 文本字符串
    /path/foo
  • 子匹配出现的任意次数
    /[^/]+
    。基本上,0个或更多重复模式的
    /
    ,后跟一些目录名(我知道文件路径中存在空格或特殊字符的问题。我现在忽略这些)
  • 不是文本字符串
    /script
    。因此,如果在(2)中重复了多少个文件夹之后,下一件事是
    /script
    ,那么它失败了,假设它后面跟着
  • 文字
    /
  • 1个或多个非
    /
    字符,后跟字符串的结尾
  • 然而。它似乎匹配以
    /path/foo
    开头的所有内容

    这个正则表达式有什么问题?

    考虑输入:

    /path/foo/a/b/script/file
    
    正则表达式匹配如下:

    ^Ok:此处前面没有文本
    /路径/foo“/路径/foo”
    (?:/[^/]+)*“/a/b/script”
    (?!/script)确定:此处后面的文本为“/文件”
    /                 "/"
    [^/]*“文件”
    $Ok:此处后面没有文本
    
    你想要的是消极的回顾,而不是消极的前瞻:

    ^Ok:此处前面没有文本
    /路径/foo“/路径/foo”
    (?:/[^/]+)*“/a/b/script”
    (?考虑输入:

    /path/foo/a/b/script/file
    
    正则表达式匹配如下:

    ^Ok:此处前面没有文本
    /路径/foo“/路径/foo”
    (?:/[^/]+)*“/a/b/script”
    (?!/script)确定:此处后面的文本为“/文件”
    /                 "/"
    [^/]*“文件”
    $Ok:此处后面没有文本
    
    你想要的是消极的回顾,而不是消极的前瞻:

    ^Ok:此处前面没有文本
    /路径/foo“/路径/foo”
    (?:/[^/]+)*“/a/b/script”
    
    (?答案是回溯。
    *
    使正则表达式引擎可以在当前尝试失败时选择其他匹配路径,例如负前瞻。基本上,始终注意非所有格量词后的负前瞻。@WiktorStribiżew“选择其他匹配路径”是什么意思?它找到的其他匹配路径是什么?Andreas发布了一个有效匹配路径的示例。答案是回溯。
    *
    使正则表达式引擎可以在当前尝试失败时选择其他匹配路径,例如负前瞻。基本上,在非po之后始终注意负前瞻s被动量词。@WiktorStribiżew“选择其他匹配路径”是什么意思?它找到的其他匹配路径是什么?Andreas发布了一个有效匹配路径的示例。