如果我有一個由字符分隔的字符串,讓我們這樣說:將字符串分割,同時保持分隔符,除了逃脫的人(正則表達式)
a-b-c
,我想保留分隔符,我可以使用向後看和前瞻,以保持自己的分隔符,如:
string.split("((?<=-)|(?=-))");
導致
a
-
b
-
c
現在,如果分隔符的一個逃脫的是這樣的:
a-b\-c
而且我希望遵守逃逸,我想出了使用這樣的正則表達式:
((?<=-(?!(?<=\\-))) | (?=-(?!(?<=\\-))))
ERGO現在
string.split("((?<=-(?!(?<=\\\\-)))|(?=-(?!(?<=\\\\-))))"):
,這部作品並導致:
a
-
b\-c
(我後來用string.replace("\\", "");
刪除的反斜槓,我還沒有找到一種方法將其包含在正則表達式中)
我的問題是理解之一。
我的理解是這樣的,正則表達式是,在口頭上,
split ((if '-' is before (unless ('\-' is before))) or (if '-' is after (unless ('\-' is before))))
爲什麼不應該的最後一部分是「除非\
是前」?如果' - '在之後,這意味着我們在'\'和' - '之間,所以只有\
應該在之前,而不是\\-
,但它不起作用,如果我改變正則表達式來反映如下:
((?<=-(?!(?<=\\-))) | (?=-(?!(?<=\\))))
結果:a
,-
,b\
,-c
,這是什麼原因呢?我在推理中的錯誤在哪裏?
你知道的,也有負面lookbehinds – fge