gpt4 book ai didi

mysql - 从 Java 到 mysql 的正则表达式转换为 '?:'

转载 作者:行者123 更新时间:2023-11-29 22:35:51 25 4
gpt4 key购买 nike

我有这个表达式

(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

这在java中工作正常,但是当我尝试在mySql中使用相同的它时,它给了我错误代码:1139正则表达式出现错误“重复运算符操作数无效”

所以当我用这个替换上面的表达式

(((^25[0-5])|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}((^25[0-5])|2[0-4][0-9]|[01]?[0-9][0-9]?)

这给了我一些额外的结果?请让我知道我做错了什么,谢谢您的时间

最佳答案

构造?:是一个非捕获组。
当引用当前documentation of MySQL时一看就知道

is aimed at conformance with POSIX 1003.2

还有那个

MySQL uses the extended version

换句话说,它使用 POSIX ERE 并且这种风格根本不支持非捕获组
有关 Java 和 POSIX ERE 中可用结构的详细列表,您可以使用 regular-expressions.info as a reference ,具体来说this site for capturing groups (只需确保在两个下拉列表中选择 JavaPOSIX ERE)。

至于为什么你会得到额外的结果:
您是否注意到您的正则表达式不相等?
在第一个正则表达式的前半部分和后半部分中,您编写 (?:25[0-5]| ,而在第二个正则表达式中,则变为 ((^25[0-5]) |
^ 匹配字符串的开头 ( here's the documentation again ),因此如果之前有任何匹配,至少第二次出现永远不会匹配。

也许你想在 MySQL 中使用这个正则表达式,但我只能在这里猜测,因为我不知道你的数据以及你到底想要匹配什么。

((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

我刚刚获取了您的第一个正则表达式并删除了所有 ?:

关于mysql - 从 Java 到 mysql 的正则表达式转换为 '?:',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29557848/

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