用于';的从Java到mysql的正则表达式转换:';

用于';的从Java到mysql的正则表达式转换:';,mysql,regex,Mysql,Regex,我有这个表情 (?:(?: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 从regexp中获取错误“重复运算符操作数无效” 所以当我用这个替换上面的表达式时 (((^25[0-5])|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}((^25[0-5])|2[0

我有这个表情

(?:(?: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 从regexp中获取错误“重复运算符操作数无效”

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

(((^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]?)
这给了我一些额外的结果?
请让我知道我做错了什么,谢谢你的时间。构造
?:
是一个非捕获组。
当参考当前一个可以看到它

旨在符合POSIX 1003.2

MySQL使用扩展版本

换句话说,它使用的是
POSIX ERE
,这种风格根本不支持非捕获组。
有关Java和POSIX ERE中可以使用的结构的详细列表,请特别注意(请确保在两个下拉列表中选择
Java
POSIX ERE

至于为什么会得到额外的结果:
您注意到您的正则表达式不相等吗?
在第一个正则表达式的上半部分和下半部分中,您编写
(?:25[0-5]|
),而在第二个正则表达式中,它变成
(^25[0-5])|

^
匹配字符串()的开头,因此如果之前有匹配的内容,则至少第二次出现的内容永远不会匹配

也许你想在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]?)

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

只获取正确的结果?我们可以自己选择数据集和正确的定义吗?;-Pi有两个结果集..一个来自java,另一个来自mySql的pne,由于mySql结果集包含来自java结果的所有值以及附加信息,我总结了附加信息(冗余)添加到我的sql查询中!此正则表达式将包括所有存在任何超过6位数字的字符串。
任何超过6位数字的数值
-您确定您的正则表达式正确吗?超过6位的数值将是,例如
1234567
,您的正则表达式将与此不匹配。对于y关于
转换的原始问题:
我的答案在上面。如果您对正则表达式本身有问题(如果它与您的输入或任何东西不匹配),我建议使用示例输入和所需输出打开一个新问题。