博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS正则之---HTML版
阅读量:4575 次
发布时间:2019-06-08

本文共 20227 字,大约阅读时间需要 67 分钟。

话不多说  上代码

正则表达式速查表_脚本之家
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n"匹配字符"n"。"\n"匹配一个换行符。串行"\\"匹配"\"而"\("则匹配"("。
^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n"或"\r"之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n"或"\r"之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo*能匹配“z"以及"zoo"。*等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,“zo+"能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?"可以匹配"does"或"does"中的"do"。?等价于{0,1}。
{
n}
n是一个非负整数。匹配确定的n次。例如,“o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的两个o。
{
n,}
n是一个非负整数。至少匹配n次。例如,“o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等价于"o+"。"o{0,}"则等价于"o*"。
{
n,m}
mn均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}"将匹配"fooooood"中的前三个o。"o{0,1}"等价于"o?"。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符(*,+,?,{
n},{
n,},{
n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo","o+?"将匹配单个"o",而"o+"将匹配所有"o"。
. 匹配除“\n"之外的任何单个字符。要匹配包括"\n"在内的任何字符,请使用像"(.|\n)"的模式。
(pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\("或"\)"。
(?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)"来组合一个模式的各个部分是很有用。例如"industr(?:y|ies)"就是一个比"industry|industries"更简略的表达式。
(?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)"能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
(?<=pattern) 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows"能匹配"2000Windows"中的"Windows",但不能匹配"3.1Windows"中的"Windows"。
(?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows"能匹配"3.1Windows"中的"Windows",但不能匹配"2000Windows"中的"Windows"。
x|y 匹配x或y。例如,“z|food"能匹配"z"或"food"。"(z|f)ood"则匹配"zood"或"food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]"可以匹配"plain"中的"a"。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]"可以匹配"plain"中的"p"。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]"可以匹配"a"到"z"范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]"可以匹配任何不在"a"到"z"范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b"可以匹配"never"中的"er",但不能匹配"verb"中的"er"。
\B 匹配非单词边界。“er\B"能匹配"verb"中的"er",但不能匹配"never"中的"er"。
\cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c"字符。
\d 匹配一个数字字符。等价于[0-9]。
\D 匹配一个非数字字符。等价于[^0-9]。
\f 匹配一个换页符。等价于\x0c和\cL。
\n 匹配一个换行符。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于\x09和\cI。
\v 匹配一个垂直制表符。等价于\x0b和\cK。
\w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]"。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]"。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41"匹配"A"。"\x041"则等价于"\x04&1"。正则表达式中可以使用ASCII编码。.
\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1"匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若nm均为八进制数字(0-7),则\nm将匹配八进制转义值nm
\nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。
常用正则表达式
用户名 /^[a-z0-9_-]{3,16}$/
密码 /^[a-z0-9_-]{6,18}$/
密码2 (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$ (由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上)
十六进制值 /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱 /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/或\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
URL /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 或 [a-zA-z]+://[^\s]*
IP 地址 /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ 或 ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
HTML 标签 /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/或<(.*)(.*)>.*<\/\1>|<(.*) \/>
删除代码\\注释 (?<!http:|\S)//.*$
匹配双字节字符(包括汉字在内) [^\x00-\xff]
汉字(字符) [\u4e00-\u9fa5]
Unicode编码中的汉字范围 /^[\u2E80-\u9FFF]+$/
中文及全角标点符号(字符) [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
日期(年-月-日) (\d{4}|\d{2})-((0?([1-9]))|(1[1|2]))-((0?[1-9])|([12]([1-9]))|(3[0|1]))
日期(月/日/年) ((0?[1-9]{1})|(1[1|2]))/(0?[1-9]|([12][1-9])|(3[0|1]))/(\d{4}|\d{2})
时间(小时:分钟, 24小时制) ((1|0?)[0-9]|2[0-3]):([0-5][0-9])
中国大陆固定电话号码 (\d{4}-|\d{3}-)?(\d{8}|\d{7})
中国大陆手机号码 1\d{10}
中国大陆邮政编码 [1-9]\d{5}
中国大陆身份证号(15位或18位) \d{15}(\d\d[0-9xX])?
非负整数(正整数或零) \d+
正整数 [0-9]*[1-9][0-9]*
负整数 -[0-9]*[1-9][0-9]*
整数 -?\d+
小数 (-?\d+)(\.\d+)?
空白行 \n\s*\r 或者 \n\n(editplus) 或者 ^[\s\S ]*\n 
QQ号码 [1-9]\d{4,}
不包含abc的单词 \b((?!abc)\w)+\b
匹配首尾空白字符 ^\s*|\s*$
编辑常用
以下是针对特殊中文的一些替换(editplus)
^[0-9].*\n 
^[^第].*\n 
^[习题].*\n
^[\s\S ]*\n 
^[0-9]*\. 
^[\s\S ]*\n 
<p[^<>*]>
href="javascript:if\(confirm\('(.*?)'\)\)window\.location='(.*?)'"
<span style=".[^"]*rgb\(255,255,255\)">.[^<>]*</span>
<DIV class=xs0>[\s\S]*?</DIV>
View Code
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td,hr,button,article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,ul,li{
margin:0;padding:0; font-size:12px}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,iframe{
display:block;}html{
font-size: 13px;_font-size: 12px;-webkit-text-size-adjust: 100%;-ms-text-size-adjust: 100%;}html, button, input, select, textarea{
font-family:'Microsoft Yahei','simsun', "arial", "sans-serif"; _font-family:"arial",'simsun','Microsoft Yahei', "sans-serif";}button, input, select, textarea{
font-size: 100%;}body{
color: #333;line-height: 1.5; text-align:center;}h1{
font-size:18px; text-align:center; line-height:32px;}a{
color: #338de6;text-decoration: none;} a:focus{
outline: thin dotted;outline:none;}a:active, a:hover{
outline: 0;}a:hover{
text-decoration: underline;}ul, ol, li{
list-style: none;}img{
border: 0;-ms-interpolation-mode: bicubic;}.fl{
float: left; display:inline-block;}.fr{
float: right !important;display:inline-block;}.auto{
margin-left:auto; margin-right:auto;}.YaHei{
font-family: 'Microsoft YaHei';}.autohide{
display:none !important;}.pr{
position:relative;}.pa{
position:absolute;}.clear{
clear:both;}.clearfix:after{
content:".";display:block;height:0;clear:both;visibility:hidden;}.clearfix{
*+height:1%;}.main{
width:1200px; margin-left:auto;margin-right:auto; background:#fff; height:auto; text-align:left;}.tdbone,.tdbone:hover{
text-decoration:none;} .fwnone{
font-weight:normal;}.fb{
font-weight:bold;}.fz12{
font-size:13px !important; _font-size:12px !important;}.fz14{
font-size:14px;}.fz16{
font-size:16px;}.fz18{
font-size:18px;}.fz22{
font-size:22px;}.fz24{
font-size:24px !important;}.wid100{
width:100%;}.w820{
width:820px;} .pad0{
padding:0px !important;}.pa5{
padding:5px;}.pa5-10{
padding:5px 10px;}.plr20{
padding-left:20px; padding-right:20px;}.plr10{
padding-left:10px; padding-right:10px;}.plr5{
padding-left:5px; padding-right:5px;}.ptb2{
padding-top:2px; padding-bottom:2px;}.ptb5{
padding-top:5px; padding-bottom:5px;}.ptb10{
padding-top:10px !important; padding-bottom:10px !important;}.ptb15{
padding-top:15px; padding-bottom:15px;}.ptb20{
padding-top:30px; padding-bottom:30px;}.pt2{
padding-top:2px;}.pt5{
padding-top:5px;}.pt10{
padding-top:10px;}.pt15{
padding-top:15px;}.pt20{
padding-top:20px;}.pt30{
padding-top:30px;}.pr5{
padding-right:5px;} .pr10{
padding-right:10px;} .pr15{
padding-right:15px;} .pr20{
padding-right:20px;} .pr40{
padding-right:40px;} .pb5{
padding-bottom:5px;} .pb10{
padding-bottom:10px !important;} .pb20{
padding-bottom:20px;} .pb50{
padding-bottom:50px;} .pl0{
padding-left:0px !important;} .pl5{
padding-left:5px;} .pl10{
padding-left:10px !important;} .pl15{
padding-left:15px;} .pl20{
padding-left:20px !important;} .pl25{
padding-left:25px !important;} .pl110{
padding-left:110px;}.pl130{
padding-left:130px;}.ma0{
margin:0px !important; *margin:0;}.mt3{
margin-top:3px;}.mtb10{
margin-top:10px;margin-bottom:10px;}.mt5{
margin-top:5px !important;}.mt10{
margin-top:10px !important;}.mt12{
margin-top:12px !important;}.mt20{
margin-top:20px;}.mr10{
margin-right:10px;}.mr15{
margin-right:15px;}.mr20{
margin-right:20px;}.mb5{
margin-bottom:5px;}.mb10{
margin-bottom:10px;}.mb20{
margin-bottom:20px;}.ml5{
margin-left:5px;}.ml10{
margin-left:10px;}.ml15{
margin-left:15px;}.ml20{
margin-left:20px;}.ml25{
margin-left:25px;}.borb1s06{
border-bottom:1px solid #f4f4f4;}.borr1s{
border-right:1px solid #eeeeee;} .menu{
position: relative;z-index: 104;z-index: 50;overflow: hidden;min-width: 1000px; width:100%;min-width:1000px; height: 40px;font-family: 'Microsoft YaHei';}.menuul{
width:1200px; margin-left:auto;margin-right:auto;height:auto;}.menu .menu-bg,.menu .menu-bg-top .menu-content-box ul li.dt,.menu .menu-bg-top .menu-content-box ul li.dd{
-webkit-transition: .3s;transition: .3s;}.menu-hover{
overflow: visible;}.menu .menu-bg{
position:relative;width: 100%; min-width:1000px;height: 230px; background: rgba(30, 91, 151, .75); background:url(navbarbg.png) repeat;}.menu .menu-bg-top{
height: 40px;border-top: 1px solid #5895d5;border-bottom: 1px solid #1d5997;background: #0081c2;}.menu .menu-bg-top .menu-content-box{
position: absolute;top: 0;left: 0;width: 100%;}.menu .menu-bg-top .menu-content-box ul{
position: relative;float: left;}.menu .menu-bg-top .menu-content-box ul li{
width:198px;}.menu .menu-bg-top .menu-content-box ul li.dt{
height: 40px;line-height: 40px;font-size: 14px;text-align: center;cursor: pointer; border-left:1px solid #2f87c1; border-right:1px solid #2f87c1;}.menu .menu-bg-top .menu-content-box ul:hover .dt,.active{
border-color: #3381d1;background: #55a7e3;}.menu .menu-bg-top .menu-content-box ul:hover .dd{
background: #184f8b;border-color: #184f8b;}.menu a,.menu a:link,.menu a:visited,.menu a:hover,.menu a:active{
text-decoration: none;cursor: pointer;color: #f5f5f5;}.tools_intro{
width:1160px; *width:1200px; margin-left:auto;margin-right:auto; background:#fff; height:auto;padding:10px 20px 30px 20px; min-height:70px;border: 1px solid #e3e3e3;/*box-shadow: inset 0 1px 1px rgba(0,0,0,.05);*/}.tools_intro h4{
height:30px; line-height:30px; padding-bottom:10px;font-size: 16px;font-family: "Microsoft YaHei";display: inline-block;font-weight: normal;color: #0474c8 !important;float: left;} .tools_intro .toolsCont{
color:#747d87 !important;}.tools_intro .toolsCont p.tacHead{
font-size:14px; color:#773E3E;font-family: 'Microsoft YaHei'; padding:10px 0px;}.tools_intro .toolsCont p{
line-height:28px; color:#777777; /*text-indent:28px;*/}.tools_intro .toolsCont p strong{
color:#5b5b5b; padding:0px 3px;font-family: 'Microsoft YaHei'; font-size:14px;}.sitelist{
margin:0;}.sitelist li{
width:359px; padding:10px 20px; height:166px; display:inline}.sitelist li p.flist{
width:358px; height:145px; overflow:hidden;}.sitelist li p.flist a{
display:inline-block; width:50%; float:left; height:30px; line-height:30px; color:#999999; text-align:left; font-size:13px;}.footlist{
height:180px; overflow:hidden;}.footerBox{
width:1200px; /*height:166px; */position:relative;}.footerline{
width:1px; height:166px; background-color:#fff; position:absolute; right:0px; bottom:0;}.footerFull{
width:1200px; overflow:hidden;}.footlist h5{
padding-bottom: 5px;font-size: 14px;font-weight: normal;color: #0474c8 !important;}.footer{
width:24%; height:43px;}.footer a{
display:block; float:left; height:43px; line-height:40px; padding:0px 10px; position:relative; color:#56688a; border-top:3px solid #fff; border-right:1px solid #f4f4f4; text-align:center; font-size:13px;}.footer a:hover,.footer .ToCurt{
text-decoration:none; background-color:#ffffff; border-top:3px solid #0474c8; color:#0474c8;} .footer a i.Fline{
width:100%; height:1px; position:absolute; bottom:0px; left:0; display:block;}.f_bottom{
width:100%; min-width:1000px;margin-top: 20px !important;}.foot_bottom{
min-height:40px; padding:20px 0px;}.foot_bottom p{
text-align:center; font-size:12px; line-height:12px;}.foot_bottom p.linkbtn{
padding-bottom:10px; color:#999999; padding-top:5px;}.foot_bottom p.linkbtn a{
color:#999999; display:inline-block; padding:0px 10px;}.foot_bottom p.linkbtn a:hover{
color:#0474c8;}.foot_bottom p.info{
color:#c0c1c4;}.foot_bottom p.info span{
display:inline-block; padding-right:10px; color:#c0c1c4;}.new_fea{
line-height:43px;padding-right:10px;}.new_fea a{
padding:0 5px; color: #0474c8;}.tabs-wrap{
margin:0px auto; background:#fff; height:36px;_height:37px; padding-top:10px;background:url(../images/nBarbg.png) #fff left bottom repeat-x;width:1200px;}.tabs-wrap a{
display:inline-block; float:left; padding:0px 20px; _padding:0px 15px; line-height:33px; height:33px; cursor:pointer; color:#0474c8;border-width:2px 1px 0px 1px;border-color:#fff;border-style:solid;}.tabs-wrap a{
border-color:#fff;}.tabs-wrap a:hover{
text-decoration:none; color:#56688a;}.tabs-wrap a.CHeadcur{
padding:0px 20px;_padding:0px 15px; line-height:33px; height:33px; color:#56688a; text-decoration:none;border-top:2px solid #56688a;border-left:1px solid #c6cede;border-right:1px solid #c6cede;border-bottom:1px solid #fff;_border-bottom:2px solid #fff;}.tabs-wrap a:hover{
color:#56688a;}#tab{
position:relative;}#tab .tabList ul li{
float:left; background:#fefefe; background:-moz-linear-gradient(top, #fefefe, #ededed); background:-o-linear-gradient(left top,left bottom, from(#fefefe), to(#ededed)); background:-webkit-gradient(linear,left top,left bottom, from(#fefefe), to(#ededed)); border:1px solid #ccc; padding:5px 0; width:235px; text-align:center; margin-left:-1px; position:relative; cursor:pointer;}#tab .tabCon{
position:absolute; left:-1px; top:32px; border:1px solid #ccc; border-top:none; width:707px; height:1740px;}#tab .tabCon div{
padding:10px; position:absolute; opacity:0; filter:alpha(opacity=0);}#tab .tabList li.cur{
border-bottom:none; background:#fff;}#tab .tabCon div.cur{
opacity:1; filter:alpha(opacity=100);}.tongji{
display:none;}.toolsbut{
background:#0474c8; border:none; color:#FFFFFF; padding:2px 3px;border-radius: 3px; cursor:pointer; font-size:12px; vertical-align:middle;width:auto;overflow:visible;}.form-control {/*padding:2px;*/font-size: 13px; line-height: 1.628571429; color: #555555; vertical-align: middle; background-color: #ffffff; border: 1px solid #cccccc; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } .form-control:focus {
border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); } .form-control::-webkit-scrollbar-track{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); background-color: #F5F5F5; border-radius: 10px;}.form-control::-webkit-scrollbar{
width: 10px; background-color: #F5F5F5;}.form-control::-webkit-scrollbar-thumb{
background-color: #c9c8c8; border-radius: 10px; background-image: -webkit-linear-gradient(90deg, transparent 75%, transparent)}

 

转载于:https://www.cnblogs.com/zhichao123/p/11251808.html

你可能感兴趣的文章
ajax+jQuery实现一个页面同时加载多个模块!
查看>>
霜风挂长天 英雄自横行 狂饮仇敌项上血 笑傲江湖传奇巅
查看>>
bzoj 2151: 种树【贪心+堆】
查看>>
bzoj 4541: [Hnoi2016]矿区【平面图转对偶图+生成树】
查看>>
Algorithm Gossip(5) 老鼠找迷宫(1)
查看>>
环形进度条
查看>>
MySql8.0数据库链接报错The driver has not received any packets from the server
查看>>
Ubuntu链接ubuntu服务器
查看>>
验证工具类 - ValidateUtils.java
查看>>
kali-linux简单学习(二)
查看>>
vue.js组件之j间的通讯二
查看>>
jenkins在windows系统下部署安装,使用
查看>>
【javascript基础】1、基本概念
查看>>
由于找不到 MSVCR100.dll,无法继续执行代码
查看>>
.net 索引器
查看>>
python 3.6 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte错误
查看>>
pymysql模块
查看>>
初识 MongoDB,MongoDB 的安装运行
查看>>
poj1947Rebuilding Roads(树形DP)
查看>>
甜菜欣欣--书单 | 那些让我读到颤抖的计算机教材
查看>>