区切り文字に、空白、=、:の連続を用いるが、それらをキーに含めたい場合は\でエスケープできることにする。
というルールで1行を2つに分けるためのパターン。 ↓
String[] en = ln.split("(?<!\\\\)[\\s=:]+", 2);
これでたぶん、平気かと思われる。
キーに含まれる\はエスケープ文字なので消したいが、\自体をキーに含めたい場合は\\とすればよいことにする。
en[0].replaceAll("(?<!\\\\)\\\\", "")
こんな。
「否定の後読み」 という用語が何とも気持ち悪いが、要は、検査していった進行方向に対して後ろ(つまり文字列の手前)に対してパターンで条件指定を追加し、かつそれを「不一致なら一致」とする、ということか。・・・よけいにわからない感じだな。
テスト↓
public class Main {
public static void main(String[] args) {
_test("aa bb");
_test("aa bb cc");
_test("aa = bb cc");
_test("aa\\ \\=bb cc");
_test("\\\\100=$1");
}
static void _test(String in){
String[] en = in.split("(?<!\\\\)[\\s=:]+", 2);
System.out.println(en[0].replaceAll("(?<!\\\\)\\\\", ""));
System.out.println("--> " + en[1]);
}
}
結果↓
aaたぶん出来るよね?
--> bb
aa
--> bb cc
aa
--> bb cc
aa =bb
--> cc
\100
--> $1
0 件のコメント:
コメントを投稿