ファイルから "行"の配列を取得するためにjavaのString.split(正規表現)で使用できる正規表現を見つけようとしています。3つの別々のケースを満たすRegex
キャリッジリターンは行末を指定するのではなく、カンマで区切りますが、すべてカンマではありません。カンマがかっこ、一重引用符、またはコメント(/ * comment、more comment * /)の間にある場合は、行末を示すものではありません。
例:
1 test fixed(5,2),
2 another_test char(12),
2 a_third_test,
3 one pic'9{9}V.99',
3 two pic'9,999V.99',
3 three fixed(7,2),
/* test,t*/
/*test 2,*/
/*and more */
2 another_field fixed bin(13),
2 a_really_long_super_long_field_name_requiring_two_lines_for_declaration
char(1),
2 a_field char(8);
予想される出力は、(明確にするために省略\ tと、余分な空白で)です:私は取得するには、3つの別々の正規表現式を作ってみた
1 test fixed(5,2)
2 another_test char(12)
2 a_third_test
3 one pic'9{9}V.99'
3 two pic'9,999V.99'
3 three fixed(7,2)
/* test,t*//*test 2,*//*and more */ 2 another_field fixed bin(13)
2 a_really_long_super_long_field_name_requiring_two_lines_for_declaration
char(1)
2 a_field char(8)
3枚:
,(?![^(]*\))
- 括弧 内のすべてのコンマありません
(,(?![^']*'))
- 単一引用符内のすべてのカンマない(,(?![^\/\*]*\*\/))
- コメント内のすべてのコンマない
は私がまたは(.*?)|(,)|'.*?'|(,)|\/*.*?*\/|(,)
とそれらを結ぶ試みたが、次の結果が得てきました:
1 test fixed
2 another_test char
2 a_third_test
3 one pic
3 two pic
3 three fixed
2 another_field fixed bin
2 a_really_long_super_long_field_name_requiring_a_line_break_... char
2 a_field char
ですそこにこれらの3つの正規表現(またはより良いものがありますか?)を組み合わせて、すべて3を満たすグループを見つけることができますか?
UPDATE:
私はいくつかの単純なJavaで正確なことを実現することができますが、私は、学術の追求として、正規表現でそうしたいと思います。
String temp = "";
for(String line:text.split("\n")){
if(line.trim().charAt(line.trim().length()-1) == ',' || line.trim().charAt(line.trim().length()-1) == ';'){
System.out.println(temp + line);
temp = "";
} else {
temp += line.trim();
}
}
オペレーターがこの点で役立つのでしょうか? – jdv
これは、私が試した最初のことでした\(。*?\)|、、| '。*?' |(、)| \/\ *。*?\ * \/|(、) 私が取得:2 3 1 PIC 3 2 PIC 3 3つの固定another_field固定ビン 2 a_really_long_super_long_field_name_requiring_two_lines ... CHAR a_third_test 2 another_test CHAR 2固定 '1のテストを2 a_field char' – gooeylewie
それは質問の本文にあるべきである種類のものです。 – jdv