/* 安好… 2022-4-1 13:41:32 我现在急需一个数值区间处理返回该区间的正则方法,求指导,昨天捣鼓了好久,弄不好 梦醒(FeiYue) 2022-4-1 13:45:23 正则判断还不如if判断 if (n>100 && n<9999) 安好… 2022-4-1 13:51:44 比如我在游戏商城买东西,我可以在搜索框用正则筛选价格区间 安好… 2022-4-1 13:51:57 搜索框只支持简单的正则模式 安好… 2022-4-1 13:52:34 比如234-743 , 生成一个正则, 录入商城的搜索框,就可以筛选出该范围匹配的内容 梦醒(FeiYue) 2022-4-1 14:01:42 最简单的就是 234|235|...|700|..|743|[3-6].. 安好… 2022-4-1 14:03:03 字符长度有限制 安好… 2022-4-1 14:03:22 唯一比较有效的就是正则 梦醒(FeiYue) 2022-4-1 14:04:56 200-700取这种简单的 [2-6]..|700 安好… 2022-4-1 14:12:15 所以啊,我才需要一个函数来转换成标准的 安好… 2022-4-1 14:13:05 复杂的最高也只有6组吧 空 2022-4-1 14:13:37 234-743 你就把这个转个正则看看 梦醒(FeiYue) 2022-4-1 14:13:47 自己限制成简单的不就行了,比如200-700的 [2-6]..|700 安好… 2022-4-1 14:17:13 反正实际情况就是只能把甚至区间转换正则才行 安好… 2022-4-1 14:27:15 [2][3][4-9]|[2][4-9][0-9]|[3-6][0-9]{2}|[7][0-3][0-9]|[7][4][0-3] */ Global n:=0 MsgBox % gen(1050, 2400) ; 递归超出次数报错 ; MsgBox % gen(111, 444) gen(a, b, q := "") { if !q { /* V2写法 a := String(Integer(a)) b := String(Integer(b)) */ ; V1写法 if a > b t := a, a := b, b := a a := Format("{:d}", a) b := Format("{:d}", b) } la := StrLen(a), lb := StrLen(b), s := "" if (la < lb) { /* V2写法 loop (t := "", la) */ ; V1写法 loop % t := "" la t .= "9" return gen(a, t, q) "|" gen("" t + 1, b, q) } else if (la == 1) return q (a == b ? a : a = "0" && b = "9" ? "\d" : "[" a "-" b "]") else { sa := SubStr(a, 1, 1) + 0, sb := SubStr(b, 1, 1) + 0 ua := SubStr(a, 2) + 0 ? sa + 1 : sa if (sa == sb) return gen(SubStr(a, 2), SubStr(b, 2), q sa) else if (ua < sb) { if ua && !(a ~= "^[1-9]0*$") s := gen(a, Format("{:0" la "d}", ua * (10 ** (la - 1)) - 1), q) if (b ~= "^9+$") s .= "|" q (ua = 9 ? "9" : "[" ua "-9]") (lb > 2 ? "\d{" (lb - 1) "}" : "\d") else { db := sb - 1 s .= "|" q (db == ua ? ua : ua = "0" && db = "9" ? "\d" : "[" ua "-" db "]") "\d" (lb > 2 ? "{" (lb - 1) "}" : "") s .= SubStr(b, 2) + 0 ? "|" gen(Format("{:0" lb "d}", sb * (10 ** (lb - 1))), b, q) : "|" q b } } else { if ua s .= "|" gen(a, Format("{:0" la "d}", ua * (10 ** (la - 1)) - 1), q) s .= SubStr(b, 2) + 0 ? "|" gen(Format("{:0" lb "d}", sb * (10 ** (lb - 1))), b, q) : "|" q b } } return LTrim(s, "|") } ; 原函数备份第一版,会递归次数超出 ; gen(a, b, q := "") { ; if !q { ; /* V2写法 ; a := String(Integer(a)) ; b := String(Integer(b)) ; */ ; V1写法 ; a := Format("{:d}", a) ; b := Format("{:d}", b) ; } ; la := StrLen(a), lb := StrLen(b), s := "" ; ; ToolTip % "递归次数:" ++n ; ; if (la < lb) { ; /* V2写法 ; loop (t := "", la) ; */ ; V1写法 ; loop % (t := "", la) ; t .= "9" ; s := gen(a, t, q) ; return s "|" gen("" t + 1, b, q) ; } else if (la == 1) { ; return q (a == b ? a : a = "0" && b = "9" ? "\d" : "[" a "-" b "]") ; } else { ; sa := SubStr(a, 1, 1) + 0, sb := SubStr(b, 1, 1) + 0 ; ua := SubStr(a, 2) + 0 ? sa + 1 : sa ; if (sa == sb) { ; return gen(SubStr(a, 2), SubStr(b, 2), q sa) ; } else if (ua < sb) { ; if ua && !(a ~= "^10*$") ; s .= "|" gen(a, "" ua * (10 ** (la - 1)) - 1, q) ; if (b ~= "^9+$") ; s .= "|" q (ua = 9 ? "9" : "[" ua "-9]") (lb > 2 ? "\d{" (lb - 1) "}" : "\d") ; else { ; db := sb - 1 ; s .= "|" q (db == ua ? ua : ua = "0" && db = "9" ? "\d" : "[" ua "-" db "]") "\d" (lb > 2 ? "{" (lb - 1) "}" : "") ; s .= SubStr(b, 2) + 0 ? "|" gen("" sb * (10 ** (lb - 1)), b, q) : "|" q b ; } ; } else if (ua == sb) { ; if ua ; s .= "|" gen(a, "" ua * (10 ** (la - 1)) - 1, q) ; s .= SubStr(b, 2) + 0 ? "|" gen("" sb * (10 ** (lb - 1)), b, q) : "|" q b ; } else { ; ; } ; } ; return LTrim(s, "|") ; }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)