javascript - 从 Javascript 到 MySQL 的正则表达式

标签 javascript mysql regex

我有这个 javascript 正则表达式来检查 URI 是否有效 (RFC 3986):

/^(https?):\/\/((?:[a-z0-9.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?$/i

现在我需要使用 REGEXP 在 MySQL 查询中转换它。

例如:

SELECT *
FROM table_name t
WHERE t.uri REGEXP '....'

你能帮帮我吗?

最佳答案

你需要

  • '...' 字符串文字中的所有 ' 字符加倍
  • 将所有 (?: 替换为 (,因为 MySQL 遗留版本使用不支持非捕获组的 POSIX 兼容正则表达式引擎
  • 一定要删除第一个 / 和最后一个 /i 因为模式在 MySQL 中作为字符串传递,而不是正则表达式文字,并且模式不区分大小写默认情况下,无需在任何地方添加 i(或手动添加 A-Z,以防某些全局设置被覆盖)
  • 将所有 \/ 替换为 / 以保持正则表达式干净
  • \d 替换为 [0-9](同样,POSIX 不支持简写字符类,尽管您也可以使用 POSIX 字符类,例如 [[:digit:]] 匹配任何数字)
  • 最有可能的是,将 \? 替换为 \\?,或者只使用 [?] 来匹配文字 ? 符号
  • 始终在字符类的结尾或开头使用文字连字符(POSIX 正则表达式中的括号表达式)。

使用

WHERE t.uri REGEXP '^https?://(([A-Za-z0-9.-]|%[0-9A-Fa-f]{2}){3,})(:[0-9]+)?((/([A-Za-z0-9._~!$&''()*+,;=:@-]|%[0-9A-Fa-f]{2})*)*)([?](([A-Za-z0-9._~!$&''()*+,;=:/?@-]|%[0-9a-fA-F]{2})*))?(#(([A-Za-z0-9._~!$&''()*+,;=:/?@-]|%[0-9A-Fa-f]{2})*))?$'

关于javascript - 从 Javascript 到 MySQL 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086358/

相关文章:

javascript - 将javascript变量传递给html进行显示

javascript - Ajax php 登录表单不指向另一个页面

mysql - 对 MySQL 和 PostgreSQL DB 进行逆向工程的应用程序?

php - MySQL TIMESTAMP 列在更新时使用什么时区?

c++ - 我无法使用 C++ 从 mysql 数据库中检索数据

javascript - 如何在剑道网格 UI 中显示总和 groupFooterTemplate

javascript - CoffeeScript - 等效的 JS 代码无法播放嵌入式 Youtube 视频

java - 分割字符串并将字符串结尾与枚举值匹配

java - 正则表达式: extract text from middle of line

php - 说明正则表达式中的字符数