我正在尝试在django中进行iregex匹配正则表达式
reg_string = (\w|\d|\b|\s)+h(\w|\d|\b|\s)+(\w|\d|\b|\s)+anto(\w|\d|\b|\s)+
self.queryset.filter(name__iregex=r"%s"%(reg_string,))
使用“The Canton”这个名称,但它没有返回任何值,但在 python re.search 中使用它的工作
print (re.search(r'(\w|\d|\b|\s)+h(\w|\d|\b|\s)+(\w|\d|\b|\s)+anto(\w|\d|\b|\s)+', 'The Canton', re.I).group()
我正在使用Mysql 5.7,任何人都知道如何解决这个问题
答案 0 :(得分:1)
请注意,MySQL REGEXP
不支持速记字符类,如\s
,\d
,\w
等。它支持一些基本的POSIX字符类,如{{1} },[:digit:]
,[:alpha:]
等
即使您继续在Python中使用该模式,也不应该在匹配时编写[:alnum:]
并捕获单个字符字符或数字,字边界或空格,1次或多次(并使用引擎匹配的最新字符重写N组的缓冲区。您可以使用单个字符类重写它 - (\w|\d|\b|\s)+
。
现在,你在MySQL中的模式看起来像
[\w\s]+
其中[_[:alnum:][:space:]]+h[_[:alnum:][:space:]]+anto[_[:alnum:][:space:]]+
变为[\w\s]+
:
[_[:alnum:][:space:]]+
- 括号表达式的开头[
- 下划线(_
匹配\w
而_
不匹配)[:alnum:]
- 一个alphanuemric char [:alnum:]
- 任何空白字符[:space:]
- 括号表达式的结尾]
- 量词,1次或更多次。