2

我正在使用在 RegexBuddy 中有效但在 Java 中无效的正则表达式。

这是我的正则表达式:(?<=(files)\\s)(.*)

这是我正在测试的字符串:"–files /root1/file1.dat;/root/file2.txt"

在 RegexBuddy 中它返回:"/root1/file1.dat;/root/file2.txt"但在 Java 中它只返回文字 word files

为什么这不起作用?

4

2 回答 2

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)

我希望解释清楚。

于 2013-03-25T23:05:06.800 回答
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”之类的情况呢?

于 2013-03-25T23:21:39.777 回答