0

要求:

我必须在一个目录下找到一个名为卸载程序的应用程序,该目录包含一些文件,如Uninstaller(如果是 linux os )Uninstaller.exe(如果是 Windows)、Uninstaller.jarUninstaller.lax

我试过了

final String pattern = "Uninstaller.*.(exe|[^lax]|[^jar])";
final FileFilter filter = new RegexFileFilter(pattern);
files = installDir.listFiles(filter);

但如果是 linux,它会返回 Uninstaller.lax!

请帮我解决这个问题。

4

4 回答 4

2

如果我理解正确,您希望匹配所有以binjarlax. 在这种情况下,使用这个:

"Uninstaller\.(bin|jar|lax)"

编辑

啊,在那种情况下,你可以匹配:

"^Uninstaller(\.exe)?$"
于 2013-05-31T09:39:26.027 回答
0

当你这样做时:

[^lax]

您定义一个字符类 - 一个匹配任何字符的标记,只要它不是 l、a、x。

所以这个令牌

(exe|[^lax]|[^jar])

方法

'匹配 exe 或匹配任何非 l/a/x 的字符或匹配任何非 j/a/r 的字符'

显然这不是你想要的:)

你只想匹配Uninstallerand Uninstaller.exe。所以试试

Uninstaller(\.exe)?$

($ 表示字符串必须结束)

在这种情况下,您不必明确说出您不想匹配的所有内容,只需说出您所做的事情即可。

于 2013-05-31T09:43:39.487 回答
0

尝试像这样的正则表达式

final String pattern = "Uninstaller(\\.exe)?";
于 2013-05-31T09:45:30.347 回答
0

如果你想要的只是Uninstalleror Uninstaller.exe,那么你可以使用:

final String pattern = "Uninstaller(\.exe|$)";
于 2013-05-31T09:45:10.893 回答