我使用的是在RegexBuddy中运行但在Java中不起作用的正则表达式。
这是我的正则表达式:(?<=(files)\\s)(.*)
这是我正在测试它的字符串:"–files /root1/file1.dat;/root/file2.txt"
在RegexBuddy中它返回:"/root1/file1.dat;/root/file2.txt"
但在Java中它只返回文字files
。
为什么这不起作用?
答案 0 :(得分:3)
试试这个正则表达式:
(?<=files\\s)(.*)
编辑添加说明
我猜你正在考虑group(1)
你的正则表达式:(?<=(files)\\s)(.*)
有三个匹配组:
group 0:/root1/file1.dat;/root/file2.txt
group 1:files
group 2:/root1/file1.dat;/root/file2.txt
我是:(?<=files\\s)(.*)
有两个:
group 0:/root1/file1.dat;/root/file2.txt
group 1:/root1/file1.dat;/root/file2.txt
实际上没有必要使用后视组,如果你想得到`/root1..... $',你的(.*)
变为group(2)
,你不需要组,
(?<=files\\s).*
将完成这项工作。
无论如何,如果你想坚持你的正则表达式,请group(2)
我希望很清楚解释。
答案 1 :(得分:0)
很奇怪,我正在运行这个,如果我把括号放在文件周围,我认为没有区别。后视内的括号没有什么区别。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex
{
public static void main(String[] args)
{
String s = "-files /root1/file1.dat;/root/file2.txt";
Pattern p = Pattern.compile("(?<=-(files)\\s)(.*)");
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(m.group());
}
}
请注意,如果您尝试解析这样的命令行参数,那么这可能是一个坏主意,因为您将遇到问题(可能)与其他参数重叠。那么像“-docs freds-files -files blah.txt”这样的情况呢?