需求是构建一个Java正则表达式,允许所有字符(管道和冒号除外)在没有转义的情况下
|------|-----------------|
|Input | Expected output |
|------|-----------------|
|aaaaa | pass |
|------|-----------------|
|aaa: | fail |
|------|-----------------|
|aaa| | fail |
|------|-----------------|
|aaa: | pass |
|------|-----------------|
|: | fail |
|------|-----------------|
|\: | pass |
|------|-----------------|
|\\: | fail |
|------|-----------------|
|\\\: | pass |
|------|-----------------|
|\\\\ | pass |
|------|-----------------|
Tried following just for colon use-case - "(?<!\\)(\\\\)*\:" 行为在哪里
发布于 2017-08-01 19:46:09
您可以使用这个基于原子组的regex:
^(?>[^:|\\]|\\.)+$供Java使用:
final String regex = "^(?>[^:|\\\\\]|\\\\.)+$";RegEx分手:
^:开始(?>:启动原子组[^:|\\]:匹配任何不是|、:和\的字符|:或\\:匹配一个\.:匹配\后面的下一个字符
)+:末端原子群。匹配这个组中的一个或多个直到结束。$:结束建议使用http://www.regular-expressions.info/atomic.html来避免回溯,以提高正则表达式的性能。
https://stackoverflow.com/questions/45446375
复制相似问题