我有一个这样的目录,我试图从"photon.exe"之前提取"光子"一词.
C:\ workspace\photon\output\i686\diagnostic\photon.exe(Suspended)线程(正在运行)
我的代码看起来像这样:
String path = "C:\workspace\photon\output\i686\diagnostic\photon.exe(Suspended) Thread(Running)";
Pattern pattern = Pattern.compile(".+\\\\(.+).exe");
Matcher matcher = pattern.matcher(path);
System.out.println(matcher.group(1));
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么样的排列,我都会继续获取IllegalStateExceptions等,尽管这个正则表达式在http://www.regexplanet.com/simple/index.html上运行.
在此先感谢您的帮助.我在这一点上非常沮丧>.<
你需要实际运行匹配器:
if ( matcher.find() ) {
System.out.println(matcher.group(1));
}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用matcher.find()上面而不是matcher.matches()因为你的正则表达式没有设置为匹配整个字符串(它与(Suspended...部件不匹配).既然如此,你真的不需要斜线的序言; \\\\(.+).exe应该工作正常.
当然,这在文档中group(int)提到:
抛出:
IllegalStateException- 如果尚未尝试匹配,或者上一个匹配操作失败
小智 2
您可以使用以下正则表达式:^.*\\(.*)\.exe.*$并且文件名将位于第一个匹配组中。这是一个例子。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main
{
public static void main(final String[] args)
{
final String input = args[0];
final Pattern pattern = Pattern.compile("^.*\\\\(.*)\\.exe.*$");
final Matcher matcher = pattern.matcher(input);
if (matcher.find())
{
System.out.println("matcher.group(1) = " + matcher.group(1));
}
else
{
System.out.format("%s does not match %s\n", input, pattern.pattern());
}
}
}
Run Code Online (Sandbox Code Playgroud)
C:\workspace\photon\output\i686\diagnostic\photon.exe(Suspended) Thread(Running)作为输入运行它,这是预期的输出:
matcher.group(1) = photon
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |