gpt4 book ai didi

java - 简化复杂的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:28 24 4
gpt4 key购买 nike

我正在寻找一种方法来简化由值(例如 12345)、关系符号(<、>、<=、>=)和连接符(&、!)组成的正则表达式。例如。表达式:

>= 12345 & <=99999 & !55555 

应该匹配。我有这个正则表达式:

(^<=|^<= | ^>= | ^>= |^<|^>|^< |^> |^)((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*

我对表达式开头和结尾处重复的 <=、>=、<、> 特别不满意。我很乐意得到如何让它更简单的提示,例如向前看,向后看。

最佳答案

从您的正则表达式开始,您可以执行以下简化步骤:

 (^<=|^<= | ^>= | ^>= |^<|^>|^< |^> |^)((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  1. 将 anchor 移出交替

    ^(<=|<= |>= |>= |<|>|< |> |)((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*

    为什么 anchor 之前有空格? (删除那个)

  2. 将下面的空格移到外面并使其成为可选的

    ^(<=|<=|>=|>=|<|>|<|>|) ?((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  3. 删除交替中的重复项

    ^(<=|>=|<|>|) ?((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  4. 末尾的空替代项将匹配空字符串 ==> 此替代项是可选的

    ^((<=|>=|<|>)? ?)?((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  5. 使等号可选并删除重复项

    ^((<|>)=? ?)?((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  6. 单个字符的交替可以用字符类代替

    ^([<>]=? ?)?((!|)([0-9]{1,5}))( & > | & < |& >=|&>=|&<=||&<=|&>=|&<|&>|&| &| & |$))*
  7. 在最后用交替做类似的事情,你最终会得到这样的东西:

    ^([<>]=? ?)?((!|)([0-9]{1,5}))( ?(& ?([<>]=?)?)?|$)

这是未经测试的,我没有改变语义(我认为是这样),但我只是在编辑器中这样做。

关于java - 简化复杂的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727283/

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