正则表达式,在特定情况下从 windows 到 linux 的路径

regular expressions, path from windows to linux in specific situations

我正在尝试将路径定界符从 windows 更改为 linux 样式,但仅限于特定代码行。 找到特定行没问题,但我希望自动替换。

IDE: 日食

每个要更改的路径都有一个复制语句,例如:
copy "path\to\..\file.cpy".

要搜索的正则表达式:(copy[\s]+")[(..|[\w]+)[\]]+(.cpy")

问题,我只得到一行的开头和结尾:$1 是 copy " 部分,$2 是 .cpy" 部分。我不知道如何获取多个文件夹。

您需要这种使用 \G 特征的模式,它在字符串的开头或上一个匹配项之后的位置成功:

pattern: ((?:\G(?!\A)|copy\s+")[^\"]*)\
replacement: /

详情:

( # capture group 1
    (?: # non capturing group with two possible starts
        \G     # contiguous to the previous match or the start of the string
        (?!\A) # disallow the start of the string to match
      |      # OR   
        copy\s+" #"# first match
    )
    [^\"]* #"# all that isn't a backslash or a double quote
)
\ # the literal backslash

一开始(第一次匹配之前)第一个分支失败(因为\G断言),只有第二个分支可以成功。一旦完成,第一个分支就能够成功。

一旦到达最后一个反斜杠,连续性就会被破坏(即:第一个分支不能再成功,模式成功的唯一途径是第二个分支等

注意:如果你想确保你的路径以 .cpy 扩展结束,你需要在第二个分支中添加带有前瞻断言的条件:

((?:\G(?!\A)|copy\s+"(?=[^"]\.cpy"))[^\"]*)\