(function(){"use strict";var e={7561:function(e,t,r){var o=r(9963),n=r(6252);const i={class:"editor"};function l(e,t,r,o,l,a){const c=(0,n.up)("router-view");return(0,n.wg)(),(0,n.iD)("div",i,[(0,n.Wm)(c)])}var a={setup(){}},c=r(3744);const s=(0,c.Z)(a,[["render",l]]);var u=s,d=r(2201),p=r(3577);const g={class:"left"},h=["onClick"];function S(e,t,r,o,i,l){const a=(0,n.up)("edit-input-list"),c=(0,n.up)("edit-menu"),s=(0,n.up)("edit-out");return(0,n.wg)(),(0,n.iD)(n.HY,null,[(0,n._)("div",g,[(0,n._)("div",null,[(0,n._)("ul",null,[((0,n.wg)(!0),(0,n.iD)(n.HY,null,(0,n.Ko)(Object.entries(e.config),(([t,r])=>((0,n.wg)(),(0,n.iD)("li",{onClick:e=>o.changeSelectTabKey(t),key:t,class:(0,p.C_)(t===e.selectTabKey?"active":"")},(0,p.zw)(r.name),11,h)))),128))])]),(0,n.Wm)(a,{data:o.currentTabData},null,8,["data"])]),(0,n.Wm)(c),(0,n.Wm)(s)],64)}var y=r(2262);r(7658);const w=e=>((0,n.dD)("data-v-7878178f"),e=e(),(0,n.Cn)(),e),m={class:"menu"},v=(0,n.Uk)("⇈推送源 "),b=w((()=>(0,n._)("span",null,"Ctrl+P",-1))),f=[v,b],_=(0,n.Uk)("⇊拉取源 "),k=w((()=>(0,n._)("span",null,"Shift+P",-1))),C=[_,k],U=(0,n.Uk)(" ⋙生成源"),x=w((()=>(0,n._)("span",null,"Ctrl+E",-1))),T=[U,x],D=(0,n.Uk)(" ⋘编辑源"),N=w((()=>(0,n._)("span",null,"Shift+E",-1))),I=[D,N],B=(0,n.Uk)(" ✗清空表单"),E=w((()=>(0,n._)("span",null,"Shift+C",-1))),K=[B,E],L=(0,n.Uk)("↶撤销操作"),R=w((()=>(0,n._)("span",null,"Ctrl+Z",-1))),A=[L,R],O=(0,n.Uk)("↷重做操作"),j=w((()=>(0,n._)("span",null,"Shift+R",-1))),H=[O,j],J=(0,n.Uk)(" ⇏调试源 "),P=w((()=>(0,n._)("span",null,"Ctrl+Enter",-1))),$=[J,P],z=(0,n.Uk)(" ✓保存源"),M=w((()=>(0,n._)("span",null,"Ctrl+S",-1))),q=[z,M];function V(e,t,r,o,i,l){const a=(0,n.up)("edit-loading"),c=(0,n.up)("edit-warn"),s=(0,n.up)("edit-success");return(0,n.wg)(),(0,n.iD)("div",m,[(0,n._)("div",null,[o.showLoading?((0,n.wg)(),(0,n.j4)(a,{key:0})):(0,n.kq)("",!0),(0,n.Wm)(c,{text:o.warnText,"is-show":o.warnShow,onChangeShow:o.changeShow},null,8,["text","is-show","onChangeShow"]),o.successShow?((0,n.wg)(),(0,n.j4)(s,{key:1,isShow:o.successShow,onChangeShow:o.changeSuccessShow,text:o.successText},null,8,["isShow","onChangeShow","text"])):(0,n.kq)("",!0)]),(0,n._)("button",{onClick:t[0]||(t[0]=(...e)=>o.push&&o.push(...e)),title:"Ctrl+P"},f),(0,n._)("button",{onClick:t[1]||(t[1]=(...e)=>o.pull&&o.pull(...e)),title:"Shift+P"},C),(0,n._)("button",{onClick:t[2]||(t[2]=(...e)=>o.conver2Tab&&o.conver2Tab(...e)),title:"Ctrl+E"},T),(0,n._)("button",{onClick:t[3]||(t[3]=(...e)=>o.conver2Source&&o.conver2Source(...e)),title:"Shift+E"},I),(0,n._)("button",{onClick:t[4]||(t[4]=(...e)=>o.clearEdit&&o.clearEdit(...e)),title:"Shift+C"},K),(0,n._)("button",{onClick:t[5]||(t[5]=(...e)=>o.undo&&o.undo(...e)),title:"Ctrl+Z"},A),(0,n._)("button",{onClick:t[6]||(t[6]=(...e)=>o.redo&&o.redo(...e)),title:"Shift+R"},H),(0,n._)("button",{onClick:t[7]||(t[7]=(...e)=>o.debug&&o.debug(...e)),title:"Ctrl+Enter"},$),(0,n._)("button",{onClick:t[8]||(t[8]=(...e)=>o.saveSource&&o.saveSource(...e)),title:"Ctrl+S"},q)])}function F(e,t){return fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then((e=>e.json()))}function Z(e){return fetch(e).then((e=>e.json()))}function W(e,t=!0){let r=/bookSource/.test(location.href),o=`http://${localStorage.getItem("url")||location.host}/`,n=r?"BookSource":"RssSource";return`${o}${e}${n}${t?"s":""}`}function G(){return Z(W("get"))}function Y(e){return F(W("save"),e)}function Q(e){return F(W("save",!1),e)}function X(e){return F(W("delete"),e)}var ee=r(3907),te=(0,ee.MT)({state:{url:localStorage.getItem("url")||"",bookSources:[],rssSources:[],currentSource:{},currentTab:localStorage.getItem("tabName")||"editTab",editTabSource:{},deBugMsg:"",searchKey:""},getters:{sources(e){return/bookSource/.test(location.href)?e.bookSources:e.rssSources}},mutations:{changeSearchKey(e,t){e.searchKey=t},saveSources(e,t){/bookSource/.test(location.href)?e.bookSources=t:e.rssSources=t},deleteSources(e,t){let r=/bookSource/.test(location.href)?e.bookSources:e.rssSources;t.forEach((e=>{let t=r.indexOf(e);t>-1&&r.splice(t,1)}))},saveCurrentSource(e){let t,r,o=e.currentSource;/bookSource/.test(location.href)?(t=e.bookSources,r="bookSourceUrl"):(t=e.rssSources,r="sourceUrl");let n=t.findIndex((e=>e[r]===o[r]));n>-1?t.splice(n,1,o):t.push(o)},changeCurrentSource(e,t){const r=JSON.stringify(t);e.currentSource=JSON.parse(r)},changeCurrentSourceValue(e,t){let r=t.value,o={true:!0,false:!1};if("Boolean"===t.type&&(r=o[r]||r),"Number"===t.type&&(r=Number(r)||r),t.key.includes("_")){let o=t.key.split("_")[0],n=t.key.split("_")[1],i={};i[n]=r,e.currentSource[o]=Object.assign(e.currentSource[o]||{},i)}else e.currentSource[t.key]=r;e.currentSource.lastUpdateTime=(new Date).getTime()},changeTabName(e,t){e.currentTab=t,localStorage.setItem("tabName",t),console.log(t)},changeEditTabSource(e,t){const r=JSON.stringify(t);e.editTabSource=JSON.parse(r)},editHistory(e,t){let r;if(localStorage.getItem("history"))r=JSON.parse(localStorage.getItem("history")),r.new.push(t),r.new.length>50&&r.new.shift(),r.old.length>50&&r.old.shift(),localStorage.setItem("history",JSON.stringify(r));else{const e={new:[t],old:[]};localStorage.setItem("history",JSON.stringify(e))}},editHistoryUndo(e){if(localStorage.getItem("history")){let t=JSON.parse(localStorage.getItem("history"));t.old.push(e.currentSource),t.new.length&&(e.currentSource=t.new.pop()),localStorage.setItem("history",JSON.stringify(t))}},clearAllHistory(){localStorage.setItem("history",JSON.stringify({new:[],old:[]}))},clearEdit(e){e.editTabSource={},e.currentSource={}},appendDeBugMsg(e,t){let r=document.querySelector("#debug_text");r.scrollTop=r.scrollHeight,e.deBugMsg+=t+"\n"},clearDeBugMsg(e){e.deBugMsg=""},clearAllSource(e){e.bookSources=[],e.rssSources=[]}},actions:{},modules:{}});const re=e=>((0,n.dD)("data-v-ab8a8a34"),e=e(),(0,n.Cn)(),e),oe={class:"fixed"},ne=re((()=>(0,n._)("div",{class:"half-circle-spinner"},[(0,n._)("div",{class:"circle circle-1"}),(0,n._)("div",{class:"circle circle-2"})],-1))),ie=[ne];function le(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",oe,ie)}var ae={name:"editLoading"};const ce=(0,c.Z)(ae,[["render",le],["__scopeId","data-v-ab8a8a34"]]);var se=ce;const ue={key:0,class:"warm"};function de(e,t,r,o,i,l){return r.isShow?((0,n.wg)(),(0,n.iD)("div",ue,[(0,n._)("p",null,(0,p.zw)(r.text),1),(0,n._)("div",null,[(0,n._)("button",{onClick:t[0]||(t[0]=(...e)=>o.changeShow&&o.changeShow(...e))},"关闭")])])):(0,n.kq)("",!0)}var pe={name:"editWarm",props:{isShow:{default:!1,type:Boolean},text:{type:String,default:""}},setup(e,{emit:t}){const r=()=>{t("changeShow",!e.isShow)};return{changeShow:r}}};const ge=(0,c.Z)(pe,[["render",de],["__scopeId","data-v-de5a7c30"]]);var he=ge;const Se={class:"success"};function ye(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",Se,[(0,n._)("p",null,(0,p.zw)(r.text),1)])}var we={props:{text:{type:String,default:""},isShow:{type:Boolean,default:!1}},emits:["changeShow"],setup(e,{emit:t}){return setTimeout((()=>{t("changeShow",!e.isShow)}),3e3),{}}};const me=(0,c.Z)(we,[["render",ye],["__scopeId","data-v-bef92f74"]]);var ve=me,be={components:{editLoading:se,editWarn:he,editSuccess:ve},setup(){const e=(0,y.iH)(!1),t=(0,y.iH)(!1),r=(0,y.iH)(""),o=(0,y.iH)(!1),i=(0,y.iH)(""),l=e=>{t.value=e},a=e=>{console.log(e),o.value=e},c=()=>{e.value=!0,G().then((n=>{e.value=!1,n.isSuccess?(te.commit("changeTabName","editList"),te.commit("saveSources",n.data),r.value=`成功拉取${n.data.length}条源`,o.value=!0):(i.value=n.errorMsg,t.value=!0)})).catch((r=>{console.log(r),e.value=!1,i.value=" 请求发生了错误,请检查你的后端地址,填写是否正确,或者 阅读APP\n确认开启web服务",t.value=!0}))},s=()=>{r.value="正在推送中",o.value=!0,e.value=!0;let n=te.getters.sources;Y(n).then((l=>{if(l.isSuccess){let e=l.data;if(Array.isArray(e)){let t="";n.length>e.length&&(n.forEach((t=>{e.find((e=>e.bookSourceUrl===t.bookSourceUrl))||console.log(t.bookSourceUrl)})),t="\n推送失败的源将用红色字体标注!"),r.value=`批量推送源到「阅读3.0APP」\n共计: ${n.length} 条\n成功: ${e.length} 条\n失败: ${n.length-e.length} 条${t}`,o.value=!0}else r.value=`批量推送源到「阅读3.0APP」成功!\n共计: ${n.length} 条`,o.value=!0}else i.value=`批量推送源失败!\nErrorMsg: ${l.errorMsg}`,t.value=!0;e.value=!1})).catch((r=>{console.log(r),e.value=!1,t.value=!0,i.value="请求发生了错误,请检查你的后端地址,填写是否正确,或者 阅读APP\n确认开启web服务"}))},u=()=>{te.commit("changeEditTabSource",te.state.currentSource),te.commit("changeTabName","editTab")},d=()=>{te.commit("changeCurrentSource",te.state.editTabSource)},p=()=>{te.commit("editHistoryUndo")},g=()=>{te.commit("clearEdit"),console.log("已清除"),r.value="已清除",o.value=!0},h=()=>{te.commit("clearEdit"),te.commit("clearAllHistory"),r.value="已清除所有历史记录",o.value=!0},S=()=>{let e=/bookSource/.test(location.href),n=te.state.currentSource;e&&""!==n.bookSourceUrl&&""!==n.bookSourceType&&""!==n.bookSourceName||!e&&""!==n.sourceUrl&&""!==n.sourceName?Q(n).then((l=>{l.isSuccess?(r.value=`源《${e?n.bookSourceName:n.sourceName}》已成功保存到「阅读3.0APP」`,o.value=!0,te.commit("saveCurrentSource")):(i.value=`源《${e?n.bookSourceName:n.sourceName}》保存失败!\nErrorMsg: ${l.errorMsg}`,t.value=!0)})):(i.value="请检查<必填>项是否全部填写",t.value=!0)},w=()=>{e.value=!0,te.commit("clearDeBugMsg"),te.commit("changeTabName","editDebug");let t=/bookSource/.test(location.href),n=te.state.currentSource;Q(n).then((i=>{console.log(i);let l="ws://"+(localStorage.getItem("url")||location.host).replace(/\d+$/,(e=>parseInt(e)+1))+"/"+(t?"bookSourceDebug":"rssSourceDebug");console.log(l);const a=new WebSocket(l);let c="",s=t?n.bookSourceUrl:n.sourceUrl;t&&(c=n.ruleSearch.checkKeyWord?n.ruleSearch.checkKeyWord:te.state.searchKey?te.state.searchKey:"我的"),a.onopen=()=>{a.send(`{"tag":"${s}", "key":"${c}"}`)},a.onmessage=e=>{te.commit("appendDeBugMsg",e.data)},a.onclose=()=>{e.value=!1,r.value="调试已关闭!",o.value=!0,te.commit("appendDeBugMsg","调试已关闭!")}}))};return(0,n.bv)((()=>{document.onkeydown=e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&w(),(e.ctrlKey||e.metaKey)&&"s"===e.key&&(S(),e.preventDefault()),e.shiftKey&&"R"===e.key&&h(),e.shiftKey&&"C"===e.key&&g(),e.ctrlKey&&"e"===e.key&&(u(),e.preventDefault()),e.shiftKey&&"e"===e.key&&(d(),e.preventDefault()),e.shiftKey&&"P"===e.key&&c(),e.ctrlKey&&"p"===e.key&&(s(),e.preventDefault())}})),{debug:w,push:s,pull:c,clearEdit:g,showLoading:e,changeShow:l,warnShow:t,successText:r,changeSuccessShow:a,successShow:o,undo:p,redo:h,conver2Tab:u,conver2Source:d,warnText:i,saveSource:S}}};const fe=(0,c.Z)(be,[["render",V],["__scopeId","data-v-7878178f"]]);var _e=fe;const ke={class:"out"};function Ce(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",ke,[(0,n._)("ul",null,[(0,n._)("li",{class:(0,p.C_)("editTab"===e.current_tab?"active":""),onClick:t[0]||(t[0]=e=>o.handleSetActive("editTab"))}," 编辑源 ",2),(0,n._)("li",{class:(0,p.C_)("editDebug"===e.current_tab?"active":""),onClick:t[1]||(t[1]=e=>o.handleSetActive("editDebug"))}," 调试源 ",2),(0,n._)("li",{class:(0,p.C_)("editList"===e.current_tab?"active":""),onClick:t[2]||(t[2]=e=>o.handleSetActive("editList"))}," 源列表 ",2),(0,n._)("li",{class:(0,p.C_)("editHelp"===e.current_tab?"active":""),onClick:t[3]||(t[3]=e=>o.handleSetActive("editHelp"))}," 帮助信息 ",2)]),((0,n.wg)(),(0,n.j4)(n.Ob,null,[((0,n.wg)(),(0,n.j4)((0,n.LL)(e.current_tab)))],1024))])}function Ue(e,t,r,i,l,a){return(0,n.wy)(((0,n.wg)(),(0,n.iD)("textarea",{placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP","onUpdate:modelValue":t[0]||(t[0]=t=>e.source=t),onInput:t[1]||(t[1]=(...e)=>i.updateEditSource&&i.updateEditSource(...e))},null,544)),[[o.nr,e.source]])}var xe={name:"editTab",setup(){const e=(0,y.qj)({source:""}),t=()=>{te.commit("changeEditTabSource",JSON.parse(e.source))};return(0,n.m0)((()=>{let t=te.state.editTabSource;Object.keys(t).length>0?(t.lastUpdateTime=(new Date).getTime(),e.source=JSON.stringify(t,null,4)):e.source=""})),{...(0,y.BK)(e),updateEditSource:t}}};const Te=(0,c.Z)(xe,[["render",Ue],["__scopeId","data-v-554d8227"]]);var De=Te;function Ne(e,t,r,i,l,a){return(0,n.wg)(),(0,n.iD)(n.HY,null,[i.isBookSource?(0,n.wy)(((0,n.wg)(),(0,n.iD)("input",{key:0,type:"text",style:{"text-align":"center",border:"1px solid #dddddd","border-radius":"4px"},placeholder:"输入搜索关键字,默认搜「我的」","onUpdate:modelValue":t[0]||(t[0]=t=>e.searchKey=t),onInput:t[1]||(t[1]=t=>i.changeSearch(e.searchKey)),onKeydown:t[2]||(t[2]=(0,o.D2)(((...e)=>i.startSearch&&i.startSearch(...e)),["enter"])),title:"输入关键词 enter(回车键)快捷搜索"},null,544)),[[o.nr,e.searchKey]]):(0,n.kq)("",!0),(0,n.wy)((0,n._)("textarea",{placeholder:"这里用于输出调试信息","onUpdate:modelValue":t[3]||(t[3]=t=>e.printDebug=t),ref:"textareaDom",id:"debug_text"},null,512),[[o.nr,e.printDebug]])],64)}var Ie={name:"editDebug",setup(){const e=(0,y.iH)(""),t=(0,y.qj)({printDebug:te.state.deBugMsg,searchKey:""}),r=e=>{te.commit("changeSearchKey",e)};(0,n.m0)((()=>{t.printDebug=te.state.deBugMsg}));const o=()=>{document.querySelectorAll(".menu>button")[6].click()},i=(0,n.Fl)((()=>/bookSource/.test(window.location.href)));return{...(0,y.BK)(t),textareaDom:e,changeSearch:r,startSearch:o,isBookSource:i}}};const Be=(0,c.Z)(Ie,[["render",Ne],["__scopeId","data-v-28b882dd"]]);var Ee=Be;const Ke={style:{display:"flex","flex-flow":"column"}},Le={class:"tool"},Re={class:"source_list"},Ae=["value"],Oe={class:"book_index"},je=["onClick"],He={class:"book_info"},Je={key:0};function Pe(e,t,r,i,l,a){return(0,n.wg)(),(0,n.iD)("div",Ke,[(0,n.wy)((0,n._)("input",{class:"search",type:"text",placeholder:"输入筛选关键词(源名称、源URL或源分组)输入自动筛选源","onUpdate:modelValue":t[0]||(t[0]=t=>e.searchKey=t),onFocus:t[1]||(t[1]=t=>e.delArr=[])},null,544),[[o.nr,e.searchKey]]),(0,n._)("div",null,[(0,n._)("div",Le,[(0,n._)("button",{onClick:t[2]||(t[2]=(...e)=>i.upFile&&i.upFile(...e))},"导入书源文件"),(0,n._)("button",{onClick:t[3]||(t[3]=(...e)=>i.outExport&&i.outExport(...e))},"导出书源文件"),(0,n._)("button",{onClick:t[4]||(t[4]=(...e)=>i.deleteActiveSource&&i.deleteActiveSource(...e))},"删除选中源"),(0,n._)("button",{onClick:t[5]||(t[5]=(...e)=>i.clearAllSources&&i.clearAllSources(...e))},"清空列表")]),(0,n._)("div",Re,[((0,n.wg)(!0),(0,n.iD)(n.HY,null,(0,n.Ko)(i.filtedSources,((r,l)=>((0,n.wg)(),(0,n.iD)("div",{key:r.bookSourceUrl||r.sourceUrl,class:(0,p.C_)(["book_item",l===i.currentActive?"book_active":""])},[(0,n.wy)((0,n._)("input",{type:"checkbox",value:l,"onUpdate:modelValue":t[6]||(t[6]=t=>e.delArr=t)},null,8,Ae),[[o.e8,e.delArr]]),(0,n._)("div",Oe,(0,p.zw)(l+1),1),(0,n._)("div",{style:{"margin-left":"10px",flex:"1"},onClick:e=>i.handleItemClick(l)},[(0,n._)("div",He,[(0,n._)("span",null,(0,p.zw)(r.bookSourceName||r.sourceName),1),i.isBookSource?((0,n.wg)(),(0,n.iD)("span",Je,"最后修改:"+(0,p.zw)(i.formatTime(r.lastUpdateTime)),1)):(0,n.kq)("",!0),(0,n._)("span",null,"分组:"+(0,p.zw)(r.bookSourceGroup||r.sourceGroup||"无分组"),1)]),(0,n._)("div",null,(0,p.zw)(r.bookSourceUrl||r.sourceUrl),1)],8,je)],2)))),128))])])])}var $e={name:"editList",setup(){let e=(0,y.qj)({searchKey:"",delArr:[],sources:[]});const t=(0,n.Fl)((()=>c(e.sources,e.searchKey))),r=(0,n.Fl)((()=>/bookSource/.test(window.location.href)));(0,n.m0)((()=>{e.sources=te.getters.sources}));let o=(0,y.iH)(null);const i=e=>{o.value=e,te.commit("clearEdit"),te.commit("changeCurrentSource",t.value[e])},l=()=>{te.commit("clearAllSource")},a=e=>{if(!e)return null;const t=new Date(e),r=t.getFullYear();let o=t.getMonth()+1;o=o<10?"0"+o:o;let n=t.getDate();n=n<10?"0"+n:n;let i=t.getHours();i=i<10?"0"+i:i;let l=t.getMinutes();l=l<10?"0"+l:l;let a=t.getSeconds();return a=a<10?"0"+a:a,r+"-"+o+"-"+n+" "+i+":"+l+":"+a},c=(t,o)=>""===o?e.sources:r.value?t.filter((e=>e.bookSourceName.toUpperCase().includes(o.toUpperCase())||(e.bookSourceGroup||"").toUpperCase().includes(o.toUpperCase())||e.bookSourceUrl.toUpperCase().includes(o.toUpperCase()))):t.filter((e=>e.sourceName.toUpperCase().includes(o.toUpperCase())||(e.sourceGroup||"").toUpperCase().includes(o.toUpperCase())||e.sourceUrl.toUpperCase().includes(o.toUpperCase()))),s=()=>{if(0===e.delArr.length)return console.log("没有选中的书源"),!1;const r=[];e.delArr.forEach((e=>{r.push(t.value[e])})),X(r).then((t=>{t.isSuccess?(console.log("删除成功"),te.commit("deleteSources",r),e.delArr=[]):console.log("错误",t)}))},u=()=>{const e=document.createElement("input");e.type="file",e.accept=".json",e.addEventListener("change",(e=>{const t=e.target.files[0];var r=new FileReader;r.readAsText(t),r.onload=()=>{const e=JSON.parse(r.result);te.commit("saveSources",e)}})),e.click()},d=()=>{const e=document.createElement("a");let t=te.getters.sources,o=r.value?"BookSource":"RssSource";e.download=`${o}_${Date().replace(/.*?\s(\d+)\s(\d+)\s(\d+:\d+:\d+).*/,"$2$1$3").replace(/:/g,"")}.json`;let n=new Blob([JSON.stringify(t,null,4)],{type:"application/json"});e.href=window.URL.createObjectURL(n),e.click()};return{currentActive:o,isBookSource:r,filtedSources:t,deleteActiveSource:s,handleItemClick:i,...(0,y.BK)(e),formatTime:a,clearAllSources:l,upFile:u,outExport:d}}};const ze=(0,c.Z)($e,[["render",Pe],["__scopeId","data-v-5c2b9492"]]);var Me=ze;const qe=(0,n.uE)('书源制作教程xpath基础教程xpath高级教程正则表达式教程正则表达式在线验证工具
^$()[]{}.?+*| 这些是Java正则特殊符号,匹配需转义(?s) 前缀表示跨行解析(?m) 前缀表示逐行匹配(?i) 前缀表示忽略大小写