Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
721 views
in Technique[技术] by (71.8m points)

regex - Splitting a string that has escape sequence using regular expression in Java

String to be split

abc:def:ghi:klm:nop

String should be split based on ":" "" is escape character. So ":" should not be treated as token.

split(":") gives

[abc]
[def]
[ghi]
[klm]
[nop]

Required output is array of string

[abc]
[def]
[ghi:klm]
[nop]

How can the : be ignored

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use a look-behind assertion:

split("(?<!\\):")

This will only match if there is no preceding . Using double escaping \\ is required as one is required for the string declaration and one for the regular expression.

Note however that this will not allow you to escape backslashes, in the case that you want to allow a token to end with a backslash. To do that you will have to first replace all double backslashes with

string.replaceAll("", ESCAPE_BACKSLASH)

(where ESCAPE_BACKSLASH is a string which will not occur in your input) and then, after splitting using the look-behind assertion, replace the ESCAPE_BACKSLASH string with an unescaped backslash with

token.replaceAll(ESCAPE_BACKSLASH, "")

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...