2

RegexBuddyでは機能するがJavaでは機能しない正規表現を使用しています。

これは私の正規表現です:(?<=(files)\\s)(.*)

これは私がテストしている文字列です:"–files /root1/file1.dat;/root/file2.txt"

RegexBuddyではそれが返されます:"/root1/file1.dat;/root/file2.txt"しかしJavaではそれは文字通りの単語だけを返しますfiles

なぜこれが機能しないのですか?

4

2 に答える 2

3

この正規表現を試してください:

(?<=files\\s)(.*)

編集説明を追加

私はあなたが取っていたと思いますgroup(1)

あなたの正規表現:(?<=(files)\\s)(.*)3つのマッチグループがあります:

group 0:/root1/file1.dat;/root/file2.txt
group 1:files
group 2:/root1/file1.dat;/root/file2.txt

私の:(?<=files\\s)(.*)2つあります:

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());
    }
}

このようなコマンドラインパラメータを解析しようとしている場合は、他のパラメータとの重複で問題が発生する可能性があるため、おそらくお勧めできません。「-docsfreds-files-filesblah.txt」などの場合はどうでしょうか。

于 2013-03-25T23:21:39.777 に答える