我的正则表达式是这样的:
((?:[a-z][a-z0-9_]*)).*?(\d+).*?((?:[a-z][a-z0-9_]*)).*?(\d+).*?([a-z])
Run Code Online (Sandbox Code Playgroud)
如果我把它作为 MySQL RegExp 的输入,我会得到重复操作符错误。我知道它是因为 ?: 发生的,我用 ^ 替换了它,我也替换了 * ? 用 [^>]* 我替换的正则表达式是这样的:
'((^[a-z][a-z0-9_]*)).[^>]*.(\\d+).[^>]*.((^[a-z][a-z0-9_]*)).[^>]*.(\\d+).[^>]*.([a-z])'
Run Code Online (Sandbox Code Playgroud)
上面的表达式执行没有错误,但匹配失败并返回错误的结果。所以我想将第一个正则表达式转换为 mysql 支持的 POSIX 标准,而不会失去约束。
需要的最重要的转换是模仿惰性量词,它在 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])
Run Code Online (Sandbox Code Playgroud)
除非你打算使用它们,否则你也可以摆脱在诸如([0-9]+)(你以前有(\d+)过的地方)之类的地方捕获括号。
解释
(?:非捕获组替换为常规组\d为[0-9][^a-z]*precedes[a-z]和[^0-9]*precedes[0-9]| 归档时间: |
|
| 查看次数: |
7037 次 |
| 最近记录: |