我的正则表达式是:
((?:[a-z][a-z0-9_]*)).*?(\d+).*?((?:[a-z][a-z0-9_]*)).*?(\d+).*?([a-z])
如果我把它作为MySQL RegExp的输入,我得到重复操作符错误。我知道它是因为?:而我用@替换它而我也替换*?使用[^>] *我替换的正则表达式是:
'((^[a-z][a-z0-9_]*)).[^>]*.(\\d+).[^>]*.((^[a-z][a-z0-9_]*)).[^>]*.(\\d+).[^>]*.([a-z])'
上面的表达式执行没有错误,但匹配失败并返回错误的结果。所以我想将第一个正则表达式转换为mysql支持的POSIX标准,而不会丢失约束。
答案 0 :(得分:2)
所需的最重要的转换是模仿延迟量词,这在MySQL中是不存在的。为此,正如您在解释的第3点中所看到的,我们将使用互不兼容的表达式。
这应该这样做:
(([a-z][a-z0-9_]*))[^0-9]*([0-9]+)[^a-z]*(([a-z][a-z0-9_]*))[^0-9]*([0-9]+)[^a-z]*([a-z])
除非您打算使用它们,否则您还可以在([0-9]+)
(之前有(\d+)
之类的地方)中捕捉括号。)
<强>解释强>
(?:
非捕获组\d
[0-9]
[^a-z]*
先于[a-z]
,而[^0-9]*
先于[0-9]