gpt4 book ai didi

java - 当字符串具有管道和冒号字符而不转义时,正则表达式会失败什么?

转载 作者:行者123 更新时间:2023-11-30 02:26:50 27 4
gpt4 key购买 nike

要求构建一个 Java 正则表达式,以允许所有字符(不包括管道和冒号)前面没有转义

|------|-----------------|
|Input | Expected output |
|------|-----------------|
|aaaaa | pass |
|------|-----------------|
|aaa: | fail |
|------|-----------------|
|aaa| | fail |
|------|-----------------|
|aaa: | pass |
|------|-----------------|
|: | fail |
|------|-----------------|
|\: | pass |
|------|-----------------|
|\\: | fail |
|------|-----------------|
|\\\: | pass |
|------|-----------------|
|\\\\ | pass |
|------|-----------------|


Tried following just for colon use-case - "(?<!\\)(\\\\)*\:"

行为在哪里

  • 在“:”和冒号前面有偶数个后缀时正确失败斜杠
  • 正确传递前面带有奇数个反斜杠的冒号

  • 错误地传递“aaa:aaa”

最佳答案

您可以使用这个基于原子组的正则表达式:

^(?>[^:|\\]|\\.)+$

RegEx Demo

对于 Java 使用:

final String regex = "^(?>[^:|\\\\\]|\\\\.)+$";

正则表达式分解:

  • ^:开始
  • (?>: 启动原子组
    • [^:|\\]:匹配除 |:\ 之外的任何字符
    • |:或
    • \\:匹配\
    • .:匹配\
    • 之后的下一个字符
  • )+:结束原子组。匹配该组中的一个或多个直到结束。
  • $:结束

建议使用atomic group 避免回溯以提高正则表达式性能。

关于java - 当字符串具有管道和冒号字符而不转义时,正则表达式会失败什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com