使用正则表达式处理URL-String中的协议

时间:2018-05-30 11:21:45

标签: java regex

问题

在我的Java应用程序中,我有代码

Paths.get(v_DirBufferdata).resolve(Paths.get(v_DirIndata).relativize(Paths.get(c_FileIndataLocation))).toString();

v_DirBufferdata"file://workflow/../buffer/"

v_DirIndata"/tmp/C4243/indata"

c_FileIndataLocation"/tmp/C4243/indata/one_doc/pv.pdf"

我想得到

"file://workflow/../buffer/one_doc/pv.pdf"

然而我正在

"file:/workflow/../buffer/one_doc/pv.pdf"

的正则表达式的溶液?

获得协议斜杠的一个简单想法是使用正则表达式。但是,我想确保只处理协议错误 - 不是一个名为“file:”的文件夹。

具体来说,“file:/”应替换为“file://”,但如果“file://”已经存在,我不想得到“file:///”。此外,只有在文件字符串的开头,才应替换“file:/”。到目前为止我已经:

"file:/".replaceFirst("^file:/[^/]", "file://")

显然这还不行。我该怎么做?

替代解决方案

如果有一个不同的解决方案,不需要正则表达式攻击,我也是开放的。

1 个答案:

答案 0 :(得分:1)

使用否定前瞻:

s.replaceFirst("^file:/(?!/)", "file://")

或者只捕获:/之后的一个字符并在替换中使用$1

s.replaceFirst("^file:/([^/])", "file://$1")