RegexBuddyでは機能するがJavaでは機能しない正規表現を使用しています。
これは私の正規表現です:(?<=(files)\\s)(.*)
これは私がテストしている文字列です:"–files /root1/file1.dat;/root/file2.txt"
RegexBuddyではそれが返されます:"/root1/file1.dat;/root/file2.txt"
しかしJavaではそれは文字通りの単語だけを返しますfiles
。
なぜこれが機能しないのですか?
この正規表現を試してください:
(?<=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)
明確に説明されているといいのですが。
奇妙なことに、私はこれを実行していますが、ファイルを角かっこで囲んでもいなくても違いはわかりません。後読みの内側の角かっこは違いを生みません。
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」などの場合はどうでしょうか。