我正在使用在 RegexBuddy 中有效但在 Java 中无效的正则表达式。
这是我的正则表达式:(?<=(files)\\s)(.*)
这是我正在测试的字符串:"–files /root1/file1.dat;/root/file2.txt"
在 RegexBuddy 中它返回:"/root1/file1.dat;/root/file2.txt"
但在 Java 中它只返回文字 word files
。
为什么这不起作用?
试试这个正则表达式:
(?<=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)
我希望解释清楚。
奇怪,我正在运行它,如果我把括号放在文件周围,我看不出有什么区别。后视中的括号没有任何区别。
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”之类的情况呢?