正则表达式SQL:重复操作符操作数无效

时间:2015-05-25 10:45:42

标签: mysql sql regex

我正在尝试使用正则表达式检测表格中所有行中的网址,这是正则表达式

\b(([\w-]+:\/\/?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|\/)))

然而,我总是得到“重复 - 操作员操作数无效”错误,在互联网上搜索数小时之后仍然是模糊不清的。 我哪里出错了?我该怎么做才能解决这个问题?而且,除了正则表达式之外,还有一种更好的方法来检测SQL中消息中的URL吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您不能在MySQL regex中使用?量词,因为语法是基于POSIX的。不过,您仍然可以使用*来匹配0个或更多字符。此外,MySQL正则表达式中的\b应替换为[[:<:]](因为它匹配单词的开头)。

因此,我建议使用

[[:<:]](([a-zA-Z0-9-]+:\/\/*|www[.])[^ ()<>]+(\([a-zA-Z0-9_]+\)|([^ [:punct:]]|\/)))

我正在将\w扩展为[a-zA-Z0-9_],因为它正是\w。而不是\s,我使用的是文字空间。我使用\d而不是[0-9]。这样做是为了提高可读性和兼容性。如果\w\d\s适合您,您可以使用它们,但我不会在POSIX specs中支持的实体中看到它们。

此外,您可以使用[:space:]代替文字空间,它匹配空格,制表符,换行符和回车符。您可以使用[a-zA-Z]代替[:alpha:],而不是[0-9],而不是[:digit:]。另请查看:

[[:<:]](([[:alpha:][:digit:]-]+:\/\/*|www[.])[^[:space:]()<>]+(\([[:alpha:][:digit:]_]+\)|([^[:space:][:punct:]]|\/)))