gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:04:55 25 4
gpt4 key购买 nike

我有这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com