【发布时间】:2013-07-06 22:06:41
【问题描述】:
如果我有一个由字符分隔的字符串,让我们这样说:
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
这是什么原因?我的推理错误在哪里?
【问题讨论】:
-
你知道,也有负面的后视
标签: java regex regex-negation lookahead lookbehind