Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
763 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 Answer

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, "")

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...