[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"tag-posts-re":48,"tag-projects-re":97,"footer-friends":101,"sidebar-tags":114,"sidebar-donations":263,"ad-sidebar_top":270,"ad-sidebar_mid":272,"ad-sidebar_bottom":274},{"alipayQr":4,"beianNumber":5,"commentsRequireApproval":6,"contactEmail":7,"copyrightNotice":5,"donationEnabled":6,"emailCodeExpireMinutes":8,"enableRegistration":6,"followBilibiliUrl":9,"followGithubUrl":10,"followQqGroup":11,"followQqQr":12,"followWechatQr":13,"footerHtml":5,"gaTrackingId":5,"heroEnabled":6,"heroSearchPlaceholder":5,"heroSubtitle":14,"heroTitle":15,"homeCategoryTabsCount":16,"homePageSize":17,"homeProjectsCount":18,"homeSpecialsCount":19,"homeToolsCount":18,"icpNumber":20,"inviteDefaultQuota":21,"inviteRequired":22,"logoUrl":23,"mailPasswordChangedBody":24,"mailPasswordChangedSubject":25,"mailRegisterCodeBody":26,"mailRegisterCodeSubject":27,"mailResetCodeBody":28,"mailResetCodeSubject":29,"mailWelcomeBody":30,"mailWelcomeSubject":31,"miniappAppid":32,"miniappEnabled":6,"profileAvatar":33,"profileBio":34,"profileName":35,"profileWechatQr":36,"promoteEnabled":6,"promoteNotice":5,"promoteWechat":5,"requireEmailVerify":6,"sectionArticleEnabled":6,"sectionArticleTitle":37,"sectionProjectsEnabled":6,"sectionProjectsTitle":38,"sectionSpecialEnabled":6,"sectionSpecialTitle":39,"sectionToolsEnabled":6,"sectionToolsTitle":40,"seoAuthor":41,"seoBaiduTongjiId":5,"seoBaiduVerify":5,"seoCanonicalEnabled":6,"seoDescription":42,"seoGoogleVerify":5,"seoKeywords":5,"seoOgImage":23,"seoRobots":5,"seoSitemapEnabled":6,"seoTitle":43,"seoTitleTemplate":44,"showHeroStats":6,"showSidebarDonations":6,"showSidebarFeedback":6,"showSidebarFollowUs":6,"showSidebarProfile":6,"showSidebarTagCloud":6,"siteDescription":42,"siteFavicon":45,"siteName":41,"siteUrl":46,"wechatQr":47},"\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790628031878385634.png","","true","enghin110@qq.com","10","https:\u002F\u002Fspace.bilibili.com\u002F470616503","https:\u002F\u002Fgithub.com\u002Fitwuge","606262780","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790627647190853446.png","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790627638856258082.jpg","精选 AI 教程、开源项目与实用工具，助你从入门到精通","探索人工智能的无限可能","6","7","4","3","赣ICP备2023014108号-2","5","false","\u002Fimages\u002Flogo\u002Flogo.png","\u003C!DOCTYPE html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\u003Cmeta charset=\"UTF-8\">\u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\u003C\u002Fhead>\n\u003Cbody style=\"margin:0;padding:24px 0;background:#f1f5f9;font-family:'Microsoft YaHei','PingFang SC',Helvetica,Arial,sans-serif;\">\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f1f5f9;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"padding:0 16px;\">\n        \u003Ctable role=\"presentation\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width:600px;width:100%;\">\n          \u003C!-- 品牌头部 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#3b82f6;border-radius:12px 12px 0 0;padding:20px 28px;\">\n              \u003Cspan style=\"font-size:18px;font-weight:bold;color:#ffffff;\">\u003Ca href=\"{site_url}\" style=\"color:#ffffff;text-decoration:none;\">{site_name}\u003C\u002Fa>\u003C\u002Fspan>\n              \u003Cspan style=\"float:right;font-size:12px;color:#dbeafe;line-height:26px;\">{site_description}\u003C\u002Fspan>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 正文卡片 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#ffffff;padding:32px 28px;border-radius:0 0 12px 12px;box-shadow:0 2px 8px rgba(15,23,42,0.06);\">\n              \n  \u003Ch2 style=\"margin:0 0 16px;font-size:20px;color:#1e293b;\">🔒 账户密码修改成功\u003C\u002Fh2>\n  \u003Cp style=\"margin:0 0 16px;font-size:14px;line-height:1.8;color:#475569;\">\n    你好，\u003Cstrong style=\"color:#1e293b;\">{username}\u003C\u002Fstrong>，你的账户密码已于刚刚修改成功。\n  \u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f8fafc;border-radius:10px;margin:8px 0 4px;\">\n    \u003Ctr>\u003Ctd style=\"padding:14px 18px;font-size:13px;line-height:2;color:#475569;\">\n      账户用户名：\u003Cstrong style=\"color:#1e293b;\">{username}\u003C\u002Fstrong>\u003Cbr>\n      账户邮箱：\u003Cstrong style=\"color:#1e293b;\">{email}\u003C\u002Fstrong>\u003Cbr>\n      修改时间：\u003Cstrong style=\"color:#1e293b;\">{change_time}\u003C\u002Fstrong>\n    \u003C\u002Ftd>\u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:16px 0 0;font-size:13px;line-height:1.8;color:#64748b;\">\n    如果这是你本人的操作，请忽略本邮件；\u003Cstrong style=\"color:#dc2626;\">如果不是你本人操作，说明账户密码可能已泄露\u003C\u002Fstrong>，\n    请立即使用「忘记密码」功能重置密码，并通过页脚联系邮箱告知站长。\n  \u003C\u002Fp>\n  \n  \u003Cp style=\"text-align:center;margin:28px 0 8px;\">\n    \u003Ca href=\"{site_url}\" style=\"display:inline-block;padding:12px 36px;background:#3b82f6;color:#ffffff;font-size:15px;font-weight:bold;text-decoration:none;border-radius:8px;\">进入{site_name}\u003C\u002Fa>\n  \u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 页脚 -->\n          \u003Ctr>\n            \u003Ctd align=\"center\" style=\"padding:20px 16px 0;\">\n              \n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">联系邮箱：\u003Ca href=\"mailto:{contact_email}\" style=\"color:#64748b;text-decoration:none;\">{contact_email}\u003C\u002Fa>\u003C\u002Fp>\n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">此邮件由系统自动发送，请勿直接回复 · © {year} {site_name}\u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftable>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>","【{site_name}】你的账户密码已修改","\u003C!DOCTYPE html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\u003Cmeta charset=\"UTF-8\">\u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\u003C\u002Fhead>\n\u003Cbody style=\"margin:0;padding:24px 0;background:#f1f5f9;font-family:'Microsoft YaHei','PingFang SC',Helvetica,Arial,sans-serif;\">\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f1f5f9;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"padding:0 16px;\">\n        \u003Ctable role=\"presentation\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width:600px;width:100%;\">\n          \u003C!-- 品牌头部 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#3b82f6;border-radius:12px 12px 0 0;padding:20px 28px;\">\n              \u003Cspan style=\"font-size:18px;font-weight:bold;color:#ffffff;\">\u003Ca href=\"{site_url}\" style=\"color:#ffffff;text-decoration:none;\">{site_name}\u003C\u002Fa>\u003C\u002Fspan>\n              \u003Cspan style=\"float:right;font-size:12px;color:#dbeafe;line-height:26px;\">{site_description}\u003C\u002Fspan>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 正文卡片 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#ffffff;padding:32px 28px;border-radius:0 0 12px 12px;box-shadow:0 2px 8px rgba(15,23,42,0.06);\">\n              \n  \u003Ch2 style=\"margin:0 0 16px;font-size:20px;color:#1e293b;\">注册邮箱验证码\u003C\u002Fh2>\n  \u003Cp style=\"margin:0 0 16px;font-size:14px;line-height:1.8;color:#475569;\">欢迎注册 \u003Cstrong>{site_name}\u003C\u002Fstrong>！感谢你的加入，请使用下方验证码完成邮箱验证：\u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:8px 0 4px;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:22px 0;\">\n        \u003Cspan style=\"font-size:32px;font-weight:bold;letter-spacing:10px;color:#3b82f6;font-family:Consolas,Menlo,monospace;\">{code}\u003C\u002Fspan>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:12px 0 0;font-size:13px;color:#64748b;\">\n    验证码 \u003Cstrong style=\"color:#dc2626;\">{expire} 分钟\u003C\u002Fstrong> 内有效，为保障账户安全，请勿向他人泄露。\n  \u003C\u002Fp>\n  \u003Chr style=\"border:none;border-top:1px solid #e2e8f0;margin:24px 0;\">\n  \n  \u003Cp style=\"margin:0 0 12px;font-size:14px;line-height:1.8;color:#475569;\">\n    这里是 \u003Cstrong style=\"color:#1e293b;\">{site_name}\u003C\u002Fstrong>，{site_description}\n  \u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:8px 0 4px;\">\n    \u003Ctr>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#eff6ff;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">📚\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#1e40af;margin-top:4px;\">精选教程\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">从入门到实战\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#ecfdf5;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🚀\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#065f46;margin-top:4px;\">开源项目\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">精选可部署方案\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"34%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#fff7ed;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🧰\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#9a3412;margin-top:4px;\">在线工具\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">即开即用提效\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:20px 0 0;font-size:12px;line-height:1.8;color:#94a3b8;\">\n    如果这不是你本人的操作，请忽略本邮件，你的账户安全不会受到影响。\n  \u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 页脚 -->\n          \u003Ctr>\n            \u003Ctd align=\"center\" style=\"padding:20px 16px 0;\">\n              \n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">联系邮箱：\u003Ca href=\"mailto:{contact_email}\" style=\"color:#64748b;text-decoration:none;\">{contact_email}\u003C\u002Fa>\u003C\u002Fp>\n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">此邮件由系统自动发送，请勿直接回复 · © {year} {site_name}\u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftable>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>","【{site_name}】注册验证码","\u003C!DOCTYPE html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\u003Cmeta charset=\"UTF-8\">\u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\u003C\u002Fhead>\n\u003Cbody style=\"margin:0;padding:24px 0;background:#f1f5f9;font-family:'Microsoft YaHei','PingFang SC',Helvetica,Arial,sans-serif;\">\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f1f5f9;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"padding:0 16px;\">\n        \u003Ctable role=\"presentation\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width:600px;width:100%;\">\n          \u003C!-- 品牌头部 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#3b82f6;border-radius:12px 12px 0 0;padding:20px 28px;\">\n              \u003Cspan style=\"font-size:18px;font-weight:bold;color:#ffffff;\">\u003Ca href=\"{site_url}\" style=\"color:#ffffff;text-decoration:none;\">{site_name}\u003C\u002Fa>\u003C\u002Fspan>\n              \u003Cspan style=\"float:right;font-size:12px;color:#dbeafe;line-height:26px;\">{site_description}\u003C\u002Fspan>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 正文卡片 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#ffffff;padding:32px 28px;border-radius:0 0 12px 12px;box-shadow:0 2px 8px rgba(15,23,42,0.06);\">\n              \n  \u003Ch2 style=\"margin:0 0 16px;font-size:20px;color:#1e293b;\">找回密码验证码\u003C\u002Fh2>\n  \u003Cp style=\"margin:0 0 16px;font-size:14px;line-height:1.8;color:#475569;\">你正在找回账户密码，请使用下方验证码完成重置操作：\u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:8px 0 4px;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"background:#f8fafc;border:1px dashed #cbd5e1;border-radius:10px;padding:22px 0;\">\n        \u003Cspan style=\"font-size:32px;font-weight:bold;letter-spacing:10px;color:#3b82f6;font-family:Consolas,Menlo,monospace;\">{code}\u003C\u002Fspan>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:12px 0 0;font-size:13px;color:#64748b;\">\n    验证码 \u003Cstrong style=\"color:#dc2626;\">{expire} 分钟\u003C\u002Fstrong> 内有效，为保障账户安全，请勿向他人泄露。\n  \u003C\u002Fp>\n  \u003Chr style=\"border:none;border-top:1px solid #e2e8f0;margin:24px 0;\">\n  \n  \u003Cp style=\"margin:0 0 12px;font-size:14px;line-height:1.8;color:#475569;\">\n    这里是 \u003Cstrong style=\"color:#1e293b;\">{site_name}\u003C\u002Fstrong>，{site_description}\n  \u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:8px 0 4px;\">\n    \u003Ctr>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#eff6ff;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">📚\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#1e40af;margin-top:4px;\">精选教程\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">从入门到实战\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#ecfdf5;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🚀\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#065f46;margin-top:4px;\">开源项目\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">精选可部署方案\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"34%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#fff7ed;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🧰\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#9a3412;margin-top:4px;\">在线工具\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">即开即用提效\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:20px 0 0;font-size:12px;line-height:1.8;color:#94a3b8;\">\n    如果这不是你本人的操作，请忽略本邮件，你的账户安全不会受到影响。\n  \u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 页脚 -->\n          \u003Ctr>\n            \u003Ctd align=\"center\" style=\"padding:20px 16px 0;\">\n              \n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">联系邮箱：\u003Ca href=\"mailto:{contact_email}\" style=\"color:#64748b;text-decoration:none;\">{contact_email}\u003C\u002Fa>\u003C\u002Fp>\n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">此邮件由系统自动发送，请勿直接回复 · © {year} {site_name}\u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftable>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>","【{site_name}】找回密码验证码","\u003C!DOCTYPE html>\n\u003Chtml lang=\"zh-CN\">\n\u003Chead>\u003Cmeta charset=\"UTF-8\">\u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\u003C\u002Fhead>\n\u003Cbody style=\"margin:0;padding:24px 0;background:#f1f5f9;font-family:'Microsoft YaHei','PingFang SC',Helvetica,Arial,sans-serif;\">\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f1f5f9;\">\n    \u003Ctr>\n      \u003Ctd align=\"center\" style=\"padding:0 16px;\">\n        \u003Ctable role=\"presentation\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"max-width:600px;width:100%;\">\n          \u003C!-- 品牌头部 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#3b82f6;border-radius:12px 12px 0 0;padding:20px 28px;\">\n              \u003Cspan style=\"font-size:18px;font-weight:bold;color:#ffffff;\">\u003Ca href=\"{site_url}\" style=\"color:#ffffff;text-decoration:none;\">{site_name}\u003C\u002Fa>\u003C\u002Fspan>\n              \u003Cspan style=\"float:right;font-size:12px;color:#dbeafe;line-height:26px;\">{site_description}\u003C\u002Fspan>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 正文卡片 -->\n          \u003Ctr>\n            \u003Ctd style=\"background:#ffffff;padding:32px 28px;border-radius:0 0 12px 12px;box-shadow:0 2px 8px rgba(15,23,42,0.06);\">\n              \n  \u003Ch2 style=\"margin:0 0 4px;font-size:20px;color:#1e293b;\">🎉 欢迎加入 {site_name}！\u003Cspan style=\"display:inline-block;margin-left:8px;padding:2px 8px;background:#dcfce7;color:#15803d;font-size:12px;border-radius:10px;vertical-align:middle;\">邮箱已验证\u003C\u002Fspan>\u003C\u002Fh2>\n  \u003Cp style=\"margin:0 0 16px;font-size:14px;line-height:1.8;color:#475569;\">\n    你好，\u003Cstrong style=\"color:#1e293b;\">{username}\u003C\u002Fstrong>，你的账户已注册成功。\n  \u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f8fafc;border-radius:10px;margin:8px 0 4px;\">\n    \u003Ctr>\u003Ctd style=\"padding:14px 18px;font-size:13px;line-height:2;color:#475569;\">\n      账户用户名：\u003Cstrong style=\"color:#1e293b;\">{username}\u003C\u002Fstrong>\u003Cbr>\n      注册邮箱：\u003Cstrong style=\"color:#1e293b;\">{email}\u003C\u002Fstrong>\u003Cbr>\n      注册奖励：\u003Cstrong style=\"color:#dc2626;\">+{register_points} 积分\u003C\u002Fstrong>已发放\n    \u003C\u002Ftd>\u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Chr style=\"border:none;border-top:1px solid #e2e8f0;margin:24px 0;\">\n  \n  \u003Cp style=\"margin:0 0 12px;font-size:14px;line-height:1.8;color:#475569;\">\n    这里是 \u003Cstrong style=\"color:#1e293b;\">{site_name}\u003C\u002Fstrong>，{site_description}\n  \u003C\u002Fp>\n  \u003Ctable role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:8px 0 4px;\">\n    \u003Ctr>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#eff6ff;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">📚\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#1e40af;margin-top:4px;\">精选教程\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">从入门到实战\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"33%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#ecfdf5;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🚀\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#065f46;margin-top:4px;\">开源项目\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">精选可部署方案\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n      \u003Ctd width=\"34%\" valign=\"top\" style=\"padding:6px;\">\n        \u003Cdiv style=\"background:#fff7ed;border-radius:8px;padding:14px 10px;text-align:center;\">\n          \u003Cdiv style=\"font-size:15px;\">🧰\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:13px;font-weight:bold;color:#9a3412;margin-top:4px;\">在线工具\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:12px;color:#64748b;margin-top:2px;\">即开即用提效\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cp style=\"margin:16px 0 0;font-size:14px;line-height:1.8;color:#475569;\">登录后你可以：\u003C\u002Fp>\n  \u003Cul style=\"margin:8px 0 0;padding-left:22px;font-size:14px;line-height:2;color:#475569;\">\n    \u003Cli>浏览、收藏优质内容与实用工具\u003C\u002Fli>\n    \u003Cli>投稿教程与项目，审核通过后获得积分奖励\u003C\u002Fli>\n    \u003Cli>参与评论、打分，与其他用户交流\u003C\u002Fli>\n    \u003Cli>通过签到、投稿、互动持续累积积分与等级\u003C\u002Fli>\n  \u003C\u002Ful>\n  \n  \u003Cp style=\"text-align:center;margin:28px 0 8px;\">\n    \u003Ca href=\"{site_url}\" style=\"display:inline-block;padding:12px 36px;background:#3b82f6;color:#ffffff;font-size:15px;font-weight:bold;text-decoration:none;border-radius:8px;\">进入{site_name}\u003C\u002Fa>\n  \u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n          \u003C!-- 页脚 -->\n          \u003Ctr>\n            \u003Ctd align=\"center\" style=\"padding:20px 16px 0;\">\n              \n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">联系邮箱：\u003Ca href=\"mailto:{contact_email}\" style=\"color:#64748b;text-decoration:none;\">{contact_email}\u003C\u002Fa>\u003C\u002Fp>\n              \u003Cp style=\"margin:6px 0 0;font-size:12px;color:#94a3b8;\">此邮件由系统自动发送，请勿直接回复 · © {year} {site_name}\u003C\u002Fp>\n            \u003C\u002Ftd>\n          \u003C\u002Ftr>\n        \u003C\u002Ftable>\n      \u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>","【{site_name}】欢迎加入{site_name}，账户注册成功","7111479@qq.com","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790627623420492239.jpg","全栈开发者，专注 AI 应用与效率工具","武哥","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790629453503799753.png","热门爆款","精选项目","精选专题","精选工具","AI导航工具站","精选优质 AI 教程、AI 工具与开源项目，助力开发者快速上手人工智能","AI导航工具站 - AI 教程 · AI 项目 · AI 工具","%s - AI导航工具站","\u002Fimages\u002Flogo\u002Ffavicon.ico","https:\u002F\u002Fwuge.fun","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790628026196296604.png",{"items":49,"pagination":95},[50],{"id":51,"title":52,"slug":53,"summary":54,"content":55,"coverImage":56,"categoryId":57,"authorId":58,"viewCount":59,"likeCount":59,"commentCount":59,"isTop":59,"isRecommend":59,"status":58,"rejectReason":5,"publishedAt":60,"createdAt":61,"updatedAt":62,"category":63,"author":67,"tags":75},19,"Python 正则表达式速查手册：12 个最常用的模式","regex","正则表达式不用背，记住元字符逻辑 + 收藏这份速查表就够了。手机号、邮箱、URL 提取等 12 个实战模式全部经过验证可直接用。","## 正则的本质：用模式描述文本\n\n正则表达式（Regex）是一种**描述文本模式的语言**。与其说「找所有手机号」，不如用模式描述「1 开头，第二位是 3-9，后面再跟 9 个数字」——这就是正则干的事。\n\nPython 用内置的 `re` 模块，零安装：\n\n```python\nimport re\n\ntext = \"联系电话：13812345678，备用：19900001111\"\nphones = re.findall(r\"1[3-9]\\d{9}\", text)\nprint(phones)  # ['13812345678', '19900001111']\n```\n\n## 四个核心函数\n\n```python\nimport re\n\n# 1. findall：找所有匹配，返回列表\nre.findall(r\"\\d+\", \"我有3个苹果和25个橘子\")  # ['3', '25']\n\n# 2. search：找第一个匹配，返回 Match 对象（没有则返回 None）\nm = re.search(r\"\\d+\", \"我有3个苹果\")\nif m:\n    print(m.group())  # '3'\n\n# 3. sub：替换\nre.sub(r\"\\d+\", \"N\", \"我有3个苹果和25个橘子\")  # '我有N个苹果和N个橘子'\n\n# 4. split：按模式切分\nre.split(r\"[,，]\", \"苹果,香蕉，橘子\")  # ['苹果', '香蕉', '橘子']\n```\n\n## 元字符速查（正则的字母表）\n\n| 符号 | 含义 | 示例 |\n|------|------|------|\n| `.` | 任意字符（除换行） | `a.c` 匹配 abc、a1c |\n| `\\d` | 数字 | `\\d\\d` 匹配 42 |\n| `\\w` | 字母\u002F数字\u002F下划线 | `\\w+` 匹配 hello_1 |\n| `\\s` | 空白（空格\u002F制表\u002F换行） | |\n| `^` `$` | 行首 \u002F 行尾 | `^hello` 要求行首是 hello |\n| `*` | 前一个出现 0 次或多次 | `ab*` 匹配 a、ab、abbb |\n| `+` | 前一个出现 1 次或多次 | `ab+` 匹配 ab、abbb |\n| `?` | 前一个出现 0 次或 1 次 | `colou?r` 匹配 color 和 colour |\n| `{n}` `{n,}` `{n,m}` | 指定次数 | `\\d{4}` 恰好 4 位数字 |\n| `[...]` | 字符集合 | `[aeiou]` 元音之一 |\n| `[^...]` | 排除集合 | `[^0-9]` 非数字 |\n| `(...)` | 分组（可提取） | 见下文 |\n| `A\\|B` | 或 | `cat\\|dog` |\n\n大写是取反：`\\D` 非数字，`\\W` 非单词字符，`\\S` 非空白。\n\n**写 Python 正则一定用原始字符串** `r\"...\"`，否则 `\\d` 会被 Python 先转义一层。\n\n## 12 个实战模式（复制即用）\n\n```python\nimport re\n\n# 1. 手机号\nr\"1[3-9]\\d{9}\"\n\n# 2. 邮箱\nr\"[\\w.+-]+@[\\w-]+\\.[\\w.]+\"\n\n# 3. URL\nr\"https?:\u002F\u002F[\\w.-]+(?:\u002F[\\w.\u002F?=&%-]*)?\"\n\n# 4. 身份证号（18位，简单校验）\nr\"\\d{17}[\\dXx]\"\n\n# 5. 日期 2026-09-29 或 2026\u002F09\u002F29\nr\"\\d{4}[-\u002F]\\d{1,2}[-\u002F]\\d{1,2}\"\n\n# 6. 时间 14:30 或 14:30:05\nr\"\\d{1,2}:\\d{2}(?::\\d{2})?\"\n\n# 7. IP 地址（简单版，不校验 0-255 范围）\nr\"(?:\\d{1,3}\\.){3}\\d{1,3}\"\n\n# 8. 中文字符\nr\"[一-龥]+\"\n\n# 9. 纯数字（整数，可带负号）\nr\"-?\\d+\"\n\n# 10. 小数（可带负号）\nr\"-?\\d+\\.?\\d*\"\n\n# 11. HTML 标签\nr\"\u003C[^>]+>\"\n\n# 12. 匹配汉字开头的用户名（2-6位中文或数字字母）\nr\"^[一-龥][\\w一-龥]{1,5}$\"\n```\n\n## 分组提取：不只匹配，还要拿出来\n\n圆括号 `()` 分组后，可以分别提取每部分内容：\n\n```python\nimport re\n\nlog = \"2026-09-29 14:30:05 [ERROR] 数据库连接失败\"\n\n# 三个分组：日期、时间、日志内容\npattern = r\"(\\d{4}-\\d{2}-\\d{2}) (\\d{2}:\\d{2}:\\d{2}) \\[(\\w+)\\] (.+)\"\nm = re.search(pattern, log)\nif m:\n    date, time_, level, msg = m.groups()\n    print(date, time_, level, msg)  # 2026-09-29 14:30:05 ERROR 数据库连接失败\n```\n\n**命名分组**更可读：\n\n```python\npattern = r\"(?P\u003Cdate>\\d{4}-\\d{2}-\\d{2}) (?P\u003Ctime>\\d{2}:\\d{2}:\\d{2}) \\[(?P\u003Clevel>\\w+)\\] (?P\u003Cmsg>.+)\"\nm = re.search(pattern, log)\nprint(m.group(\"msg\"))  # 按名字取，不用数括号顺序\n```\n\n## 贪婪与非贪婪：最容易踩的坑\n\n默认是**贪婪匹配**——尽可能多地吃字符：\n\n```python\nimport re\n\ntext = \"\u003Cp>第一段\u003C\u002Fp>\u003Cp>第二段\u003C\u002Fp>\"\n\n# 贪婪：从第一个 \u003Cp> 一直吃到最后一个 \u003C\u002Fp>\nre.findall(r\"\u003Cp>.*\u003C\u002Fp>\", text)\n# ['\u003Cp>第一段\u003C\u002Fp>\u003Cp>第二段\u003C\u002Fp>']  ← 不是想要的！\n\n# 非贪婪（加 ?）：吃到最近的 \u003C\u002Fp> 就停\nre.findall(r\"\u003Cp>.*?\u003C\u002Fp>\", text)\n# ['\u003Cp>第一段\u003C\u002Fp>', '\u003Cp>第二段\u003C\u002Fp>']  ← 正确\n```\n\n记住：`*`、`+`、`{n,m}` 后面加 `?` 就变非贪婪。解析 HTML\u002F括号配对内容时，几乎总是用非贪婪。\n\n## 编译复用与标志位\n\n循环里反复用同一个正则，先编译一次提速：\n\n```python\nPHONE_RE = re.compile(r\"1[3-9]\\d{9}\")  # 编译一次\nfor line in lines:\n    m = PHONE_RE.search(line)           # 复用\n```\n\n常用标志位：\n\n```python\nre.findall(r\"hello\", text, re.IGNORECASE)  # 忽略大小写，HELLO 也能匹配\nre.findall(r\"^第.章\", text, re.MULTILINE)  # 多行模式：^ $ 匹配每行的首尾\nre.findall(r\"a.c\", text, re.DOTALL)        # 让 . 也能匹配换行符\n```\n\n## 什么时候不该用正则\n\n正则很强，但有边界：\n\n1. **别用正则解析 HTML**：HTML 不是规则语言，嵌套和异常写法会让正则崩溃。用 BeautifulSoup\u002Flxml\n2. **别用正则校验复杂规则**：密码强度「同时含大小写+数字+符号且不复读」，用代码逐项判断比一条超长正则清晰得多\n3. **简单字符串操作别上正则**：`s.startswith()`、`s.split()`、`in` 能解决的，用它们更快更易读\n\n## 练习与调试工具\n\n- **regex101.com**：在线调试神器，粘贴文本和正则，实时高亮匹配、逐字符解释正则含义\n- **pythex.org**：轻量替代\n- 写复杂正则时，先写 3-5 个「应该匹配」和「不应该匹配」的测试用例，边写边验证\n\n## 写在最后\n\n正则不用「学会」再开始用——它是个查表工具。收藏本文的 12 个模式，遇到新需求时在 regex101 上边试边改，三次之后你就会发现自己已经不怎么看表了。\n","\u002Fstatic\u002Fuploads\u002Fimages\u002F2026\u002F09\u002F29\u002F1790636138723006263.png",8,1,0,"2026-09-29T06:56:31.458490256+08:00","2026-09-29T06:55:38.723133538+08:00","2026-09-29T06:56:31.458543123+08:00",{"id":57,"name":64,"slug":65,"description":64,"icon":5,"sortOrder":59,"postCount":59,"parentId":59,"createdAt":66,"updatedAt":66},"Python专题","Python","2026-09-29T06:55:05.938571812+08:00",{"id":58,"username":68,"email":32,"phone":5,"nickname":69,"avatarUrl":70,"bio":5,"role":58,"status":58,"points":59,"lastLoginAt":71,"loginCount":72,"createdAt":73,"updatedAt":74},"wuge","站长","\u002Fstatic\u002Fuploads\u002Favatars\u002F2026\u002F09\u002F29\u002F1790630804049538805.jpg","2026-09-29T05:22:12.192245111+08:00",3,"2026-09-29T04:25:29.170055083+08:00","2026-09-29T05:26:46.960829427+08:00",[76,81,86,91],{"id":77,"name":65,"slug":78,"color":79,"postCount":59,"createdAt":80},6,"python","#e2e8f0","2026-09-29T04:25:30.347030306+08:00",{"id":82,"name":83,"slug":84,"color":79,"postCount":59,"createdAt":85},147,"正则表达式","zheng-ze-biao-da-shi","2026-09-29T06:55:38.700014658+08:00",{"id":87,"name":88,"slug":89,"color":79,"postCount":59,"createdAt":90},148,"文本处理","wen-ben-chu-li","2026-09-29T06:55:38.708683837+08:00",{"id":92,"name":93,"slug":93,"color":79,"postCount":59,"createdAt":94},149,"re","2026-09-29T06:55:38.716286829+08:00",{"page":58,"pageSize":96,"total":58,"totalPages":58},12,{"items":98,"pagination":99,"tag":100},[],{"page":58,"pageSize":96,"total":59,"totalPages":58},{"id":92,"name":93,"slug":93,"color":79,"postCount":59,"createdAt":94},[102,109],{"id":103,"name":104,"url":105,"logo":106,"description":104,"sortOrder":59,"status":58,"createdAt":107,"updatedAt":108},2,"哔哩哔哩","https:\u002F\u002Fwww.bilibili.com\u002F","\\images\\social\\bilibili.png","0001-01-01T00:00:00Z","2026-09-29T04:44:41.867019475+08:00",{"id":58,"name":110,"url":111,"logo":112,"description":110,"sortOrder":59,"status":58,"createdAt":113,"updatedAt":113},"GitHub","https:\u002F\u002Fgithub.com","\\images\\social\\github.png","2026-09-29T04:32:39.65740234+08:00",[115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,194,199,204,209,214,219,224,229,234,239,243,248,253,258],{"id":116,"name":117,"slug":118,"color":79,"postCount":59,"createdAt":119},150,"AI","ai","2026-09-29T06:55:38.743861502+08:00",{"id":121,"name":122,"slug":123,"color":79,"postCount":59,"createdAt":124},53,"AI 绘画","ai-hui-hua","2026-09-29T04:25:30.70107663+08:00",{"id":126,"name":127,"slug":128,"color":79,"postCount":59,"createdAt":129},94,"AIGC","aigc","2026-09-29T06:46:13.817043541+08:00",{"id":131,"name":132,"slug":133,"color":79,"postCount":59,"createdAt":134},81,"AI入门","ai-ru-men","2026-09-29T06:46:13.646321088+08:00",{"id":136,"name":137,"slug":138,"color":79,"postCount":59,"createdAt":139},113,"AI写作","ai-xie-zuo","2026-09-29T06:46:14.098797917+08:00",{"id":141,"name":142,"slug":143,"color":79,"postCount":59,"createdAt":144},95,"AI工具","ai-gong-ju","2026-09-29T06:46:13.849105815+08:00",{"id":146,"name":147,"slug":148,"color":79,"postCount":59,"createdAt":149},87,"AI技巧","ai-ji-qiao","2026-09-29T06:46:13.717351439+08:00",{"id":151,"name":152,"slug":153,"color":79,"postCount":59,"createdAt":154},92,"AI绘画","ai-hui-hua-2","2026-09-29T06:46:13.800506851+08:00",{"id":156,"name":157,"slug":158,"color":79,"postCount":59,"createdAt":159},88,"AI编程","ai-bian-cheng","2026-09-29T06:46:13.748934007+08:00",{"id":161,"name":162,"slug":163,"color":79,"postCount":59,"createdAt":164},104,"API","api","2026-09-29T06:46:13.964167454+08:00",{"id":166,"name":167,"slug":168,"color":79,"postCount":59,"createdAt":169},24,"Agent","agent","2026-09-29T04:25:30.481917452+08:00",{"id":171,"name":172,"slug":173,"color":79,"postCount":59,"createdAt":174},15,"Apache-2.0","apache-2-0","2026-09-29T04:25:30.413130076+08:00",{"id":176,"name":177,"slug":178,"color":79,"postCount":59,"createdAt":179},124,"BeautifulSoup","beautifulsoup","2026-09-29T06:55:38.372320794+08:00",{"id":181,"name":182,"slug":183,"color":79,"postCount":59,"createdAt":184},71,"C++","c","2026-09-29T04:25:30.832723566+08:00",{"id":186,"name":187,"slug":188,"color":79,"postCount":59,"createdAt":189},9,"C\u002FC++","c-c","2026-09-29T04:25:30.367438818+08:00",{"id":57,"name":191,"slug":192,"color":79,"postCount":59,"createdAt":193},"CPU 推理","cpu-tui-li","2026-09-29T04:25:30.360161464+08:00",{"id":195,"name":196,"slug":197,"color":79,"postCount":59,"createdAt":198},82,"ChatGPT","chatgpt","2026-09-29T06:46:13.65246271+08:00",{"id":200,"name":201,"slug":202,"color":79,"postCount":59,"createdAt":203},43,"ChatGPT 界面","chatgpt-jie-mian","2026-09-29T04:25:30.631791206+08:00",{"id":205,"name":206,"slug":207,"color":79,"postCount":59,"createdAt":208},109,"Coze","coze","2026-09-29T06:46:14.04772698+08:00",{"id":210,"name":211,"slug":212,"color":79,"postCount":59,"createdAt":213},89,"DeepSeek","deepseek","2026-09-29T06:46:13.756746391+08:00",{"id":215,"name":216,"slug":217,"color":79,"postCount":59,"createdAt":218},103,"Embedding","embedding","2026-09-29T06:46:13.931530378+08:00",{"id":220,"name":221,"slug":222,"color":79,"postCount":59,"createdAt":223},139,"Excel","excel","2026-09-29T06:55:38.596869557+08:00",{"id":225,"name":226,"slug":227,"color":79,"postCount":59,"createdAt":228},132,"FastAPI","fastapi","2026-09-29T06:55:38.496902061+08:00",{"id":230,"name":231,"slug":232,"color":79,"postCount":59,"createdAt":233},107,"Fine-tuning","fine-tuning","2026-09-29T06:46:14.010861283+08:00",{"id":235,"name":236,"slug":237,"color":79,"postCount":59,"createdAt":238},97,"Gamma","gamma","2026-09-29T06:46:13.863615311+08:00",{"id":72,"name":240,"slug":241,"color":79,"postCount":59,"createdAt":242},"Go","go","2026-09-29T04:25:30.324360969+08:00",{"id":244,"name":245,"slug":246,"color":79,"postCount":59,"createdAt":247},98,"Kimi","kimi","2026-09-29T06:46:13.871065157+08:00",{"id":249,"name":250,"slug":251,"color":79,"postCount":59,"createdAt":252},7,"LLM","llm","2026-09-29T04:25:30.353458642+08:00",{"id":254,"name":255,"slug":256,"color":79,"postCount":59,"createdAt":257},31,"LLMOps","llmops","2026-09-29T04:25:30.534990482+08:00",{"id":259,"name":260,"slug":261,"color":79,"postCount":59,"createdAt":262},101,"LangChain","langchain","2026-09-29T06:46:13.916898801+08:00",[264],{"id":58,"userId":265,"donorName":35,"amount":266,"message":267,"paymentMethod":268,"isAnonymous":59,"status":58,"createdAt":269},null,128,"加油","wechat","2026-09-29T04:45:44+08:00",{"materials":271},[],{"materials":273},[],{"materials":275},[]]