2013-06-07 30 views
6

Tôi đang cố gắng sử dụng String.Split() để phân tách truy vấn, trong trường hợp đó là truy vấn HiveQL.Java regex: khớp với một char ngoại trừ khi bắt đầu bằng một char khác

Trường hợp tôi có là tôi muốn chia dọc theo ; trừ khi số ; này đứng trước \. Vấn đề của tôi:

String.Split(";") 

là không đủ.

String.Split("[^\\\\];") 

(tức là không phải là một \ theo sau là một ;) áp dụng trên

select table; count table; 

sẽ cung cấp cho nhóm "select tabl", " count tabl", vì vậy tôi đã làm mất nhân vật trước khi ;.

Có giải pháp nào không?

Trả lời

10

Bạn cần một negative lookbehind cho rằng:

String.Split("(?<![\\\\]);"); 

Đây là một demo on ideone.

+0

+1, nhưng thêm ';' sau khi neo;) – fge

+0

@fge Điều này hiện đã được khắc phục, cảm ơn! – dasblinkenlight

+1

Và vì đây là một trận đấu char duy nhất, bạn không cần dấu ngoặc vuông – fge

Các vấn đề liên quan