Java Regex在拆分之前检查以前的char

Che*_*sum 4 java regex

我有这样的字符串

这:字符串:必须〜:是:分:时:前面:CHAR:是:不〜:此

我需要用分隔符":"拆分该行,但仅当分隔符前的字符不是"〜"时才

我现在有以下正则表达式:

String[] split = str.split(":(?<!~:)");
Run Code Online (Sandbox Code Playgroud)

它有效,但是由于我纯粹通过反复试验来达到它,我不相信它是最有效的方法.此外,此功能将经常在大字符串上重复调用,因此性能会受到考虑.什么是更有效的方式?

Kob*_*obi 5

一个稍微简单的方法是:

(?<!~):
Run Code Online (Sandbox Code Playgroud)

这样你:两次不匹配.我怀疑你会看到表演上的任何差异.通过简单地查找下一个冒号并在它之前检查代字号,在没有正则表达式的情况下编写也非常简单.

  • 好奇的表情,那.:) (3认同)
  • 我已经猜到OP的方式更快:在你知道需要它之前不要做后视镜.你知道lookbehind几乎在每个位置都会成功,因此首先过滤`:`是有意义的.在我的测试中,`:(?<!〜:)的平均值几乎是`(?<!〜)的两倍:`(但与手动编码的方法相比,两者的速度都非常慢). (2认同)