Linux Shell 正则表达式
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>简介<ul class="second_class_ul"><li>
常用字符</li><li>
普通字符</li><li>
限定符 </li><li>
定位符 </li><li>
分组 </li><li>
捕获分组</li><li>
非捕获分组</li><li>
反向引用 </li></ul></li></ul></div><p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/76eb99f2514ad55567ea9fd47b319c74.jpg" width="auto"></p>
<p class="maodian"></p><h2>
简介</h2>
<p>
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。</p>
<p>
常用正则表达式</p>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/ceb2ff713cb62adda13b14087169e427.jpg" width="auto"></p>
<p class="maodian"></p><h3>
常用字符</h3>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/9a6ee3cbe362b8dd0b942f5f9e6ea506.jpg" width="auto"></p>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/6231f3b07e16cbc919dda650568e5962.jpg" width="auto"></p>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/fab8279cfd574700b190b10aec2be025.jpg" width="auto"></p>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/5fc85c8e192f13ed87f620cb52abd265.jpg" width="auto"></p>
<p class="maodian"></p><h3>
普通字符</h3>
<p>
普通字符主要讲解以下内容,并举例说明</p>
<ol class="dp-xml">
<li class="alt">
<span><span>// String </span><span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>;//匹配a-z中任意一个字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>;//匹配A-Z中任何一个字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"abc"</span><span>;//匹配字符串abc </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"(?i)abc"</span><span>;//匹配字母abc不区分大小写 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>;//匹配0-9任何一个字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"[^0-9]"</span><span>;//匹配不是0-9中的任何一个字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"[^0-9]{2}"</span><span>;//匹配2个不是0-9的字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\d"</span><span>;//匹配任何一个数字字符,等价于 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\D"</span><span>;//匹配任何一个非数字字符,等价于[^0-9] </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\w"</span><span>;//匹配任何一个数字、字母、下划线,等价于 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\W"</span><span>;//匹配任何一个除了数字、字母、下划线,等价于[^0-9a-zA-Z_] </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\s"</span><span>;//匹配任何一个空字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"\\S"</span><span>;//匹配任何一个非空字符 </span></span><span> </span>
</li>
<li class="alt">
<span>// String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"ab|cd"</span><span>;//选择匹配符,匹配字符串ab或者cd </span></span>
</li>
</ol>
<p>
1) String regStr = "";//匹配a-z中任意一个字符</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test1() { </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"abc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span> } </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/186ed9887e8af7e3ff8362f4992e2449.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
2) String regStr = "";//匹配A-Z中任何一个字符</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"ABCabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/2999a8ba90a257782a1e17991dd222cd.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
3)String regStr = "abc";//匹配字符串abc</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"ABCabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"abc"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/cf680f58f66f04c76dc3a490db9a3fbc.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
4)String regStr = "(?i)abc";//匹配字母abc不区分大小写</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"ABCabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"(?i)abc"</span><span>; </span></span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/a6a62ccdc73e07cec17b7ce0f2e08068.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
5) String regStr = "";//匹配0-9任何一个字符</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"ABCabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">""</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/aeb3d077954626c4ded87a022d3d1f25.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
6) String regStr = "[^0-9]";//匹配不是0-9中的任何一个字符</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"ABCabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"[^0-9]"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/4b9554c497f4c2f242e16948d820f83b.jpg" width="auto"></p>
<p>
结果展示</p>
<p class="maodian"></p><h3>
限定符 </h3>
<ol class="dp-xml">
<li class="alt">
<span><span>/** </span></span><span> </span>
</li>
<li class="alt">
<span> * 限定符 </span><span> </span>
</li>
<li class="alt">
<span> * *:表示出现任意次数,0次或者n次,如(abc)*表示abc出现0次或者多次 </span><span> </span>
</li>
<li class="alt">
<span> * +:表示出现至少1次或者n次,如(abc)+表示abc出现1次或者多次 </span><span> </span>
</li>
<li class="alt">
<span> * ?:表示出现至少0次或者1次,如abc?表示c出现0次或者1次 </span><span> </span>
</li>
<li class="alt">
<span> * {n}:表示出现n次,如{2},表示匹配2次数字 </span><span> </span>
</li>
<li class="alt">
<span> * {n,}表示至少出现n次,如{3,}表示匹配至少3次数字 </span><span> </span>
</li>
<li class="alt">
<span> * {n,m}表示出现至少n次,最多m次,如{2,4}表示匹配次数2-4次数字 </span><span> </span>
</li>
<li class="alt">
<span> */ </span>
</li>
</ol>
<p>
1) *:表示出现任意次数,0次或者n次</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zypabcabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"zyp(abc)*"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr);</span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/ea687d7ff29c3139e3a875022d1849a7.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
2)+:表示出现至少1次或者n次,如(abc)+表示abc出现1次或者多次</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zypabc2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"zyp(abc)+"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/ea057d172ebd3d772136d21c188c4827.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
3)?:表示出现至少0次或者1次,如abc?表示c出现0次或者1次</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"zyp(abc)?"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/8ad4f01c922385306196f8943682ad31.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
4){n}:表示出现n次,如{2},表示匹配2次数字</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"{2}"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/553d6b57147ae4a6d7e625ab6527bd5f.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
5){n,}表示至少出现n次,如{3,}表示匹配至少3次数字</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"{2,}"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0));</span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/40374ebc554611a6ce90b13081640d6e.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
6){n,m}表示出现至少n次,最多m次,如{2,4}表示匹配次数2-4次数字</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"{2,4}"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr);</span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/cba772dc95dc14f104c0a06a2ef052f5.jpg" width="auto"></p>
<p>
结果展示</p>
<p class="maodian"></p><h3>
定位符 </h3>
<ol class="dp-xml">
<li class="alt">
<span><span>/** </span></span><span> </span>
</li>
<li class="alt">
<span> * 定位符 </span><span> </span>
</li>
<li class="alt">
<span> * ^:表示字符串以什么开头的意思。如:有一个字符串123abc,正则为^+*(必须已数字开头),则能成功匹配上。如果字符串为a123abc则匹配不上 </span><span> </span>
</li>
<li class="alt">
<span> * $:表示字符串以什么结束的意思。如:有一个字符串123abc,正则为^++$(表示以数字开头,字母结尾)则能成功匹配上。如果字符串为a123abc1则匹配不上 </span><span> </span>
</li>
<li class="alt">
<span> * \\b:表示边缘匹配(字符串的结尾或者空格之后)。有一个字符串abc123abc,正则为abc\\b,匹配到的为最后的那个abc </span><span> </span>
</li>
<li class="alt">
<span> * \\B:与\\b相反 </span><span> </span>
</li>
<li class="alt">
<span> */ </span>
</li>
</ol>
<p>
1) ^:表示字符串以什么开头的意思</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021zyp"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"^+"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/47ea87e6ef13a066403a4a7391ab1802.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
2) $:表示字符串以什么结束的意思</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021zyp"</span><span>;</span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"$"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span>
</li>
<li>
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/2a500aeceb9a08da2e136b0b28834600.jpg" width="auto"></p>
<p>
没有匹配到,因为要以数字结束</p>
<p>
3) \\b:表示边缘匹配(字符串的结尾或者空格之后)</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021zyp"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"zyp\\b"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0));</span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/69f3e33bb226421b0b253de6c5715b7e.jpg" width="auto"></p>
<p>
匹配到的是最后一个“zyp”</p>
<p>
4) \\B:与\\b相反</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"zyp2021zyp"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"zyp\\B"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span>
</li>
<li>
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/c3a872780113f7e7e3f0e585db3e0b9d.jpg" width="auto"></p>
<p>
匹配到的是第一个“zyp”</p>
<p class="maodian"></p><h3>
分组 </h3>
<ol class="dp-xml">
<li class="alt">
<span><span>/** </span></span><span> </span>
</li>
<li class="alt">
<span> * 分组:可分为捕获分组和非捕获分组 </span><span> </span>
</li>
<li class="alt">
<span> * 1.捕获分组: </span><span> </span>
</li>
<li class="alt">
<span> * 1)如(\\d\\d)(\\d\\d)表示匹配4位数字,如果字符串位2021abcd, </span><span> </span>
</li>
<li class="alt">
<span> * 我们通过matcher.group(0)得到2021 </span><span> </span>
</li>
<li class="alt">
<span> * 通过matcher.group(1)得到20 </span><span> </span>
</li>
<li class="alt">
<span> * 通过matcher.group(2)得到21 </span><span> </span>
</li>
<li class="alt">
<span> * 由此可见()起到分组的作用 </span><span> </span>
</li>
<li class="alt">
<span> * </span><span> </span>
</li>
<li class="alt">
<span> * 2)如(?<span class="tag"><</span><span class="tag-name">a1</span><span class="tag">></span><span>\\d\\d)(?</span><span class="tag"><</span><span class="tag-name">a2</span><span class="tag">></span><span>\\d\\d)表示匹配4位数字,如果字符串位2021abcd, </span></span><span> </span>
</li>
<li class="alt">
<span> * 我们通过matcher.group(0)得到2021 </span><span> </span>
</li>
<li class="alt">
<span> * 通过matcher.group(1)得到20,还可以通过matcher.group(a1)得到20 </span><span> </span>
</li>
<li class="alt">
<span> * 通过matcher.group(2)得到21,还可以通过matcher.group(a2)得到21 </span><span> </span>
</li>
<li class="alt">
<span> * 由此可见()起到分组的作用 </span><span> </span>
</li>
<li class="alt">
<span> * </span><span> </span>
</li>
<li class="alt">
<span> * 2.非捕获分组:不能通过group(1)或者group(2)获取值 </span><span> </span>
</li>
<li class="alt">
<span> * 1)如20(?:20|21|22)表示匹配2020|2021|2022 </span><span> </span>
</li>
<li class="alt">
<span> * 2) 如20(?=20|21|22)表示匹配2020或2021或2022中的20 </span><span> </span>
</li>
<li class="alt">
<span> * 3)如20(?!20|21|22)表示匹配不匹配2020或2021或2022中的20,匹配其它20 </span><span> </span>
</li>
<li class="alt">
<span> * </span><span> </span>
</li>
<li class="alt">
<span> */ </span>
</li>
</ol>
<p class="maodian"></p><h3>
捕获分组</h3>
<p>
1)如(\\d\\d)(\\d\\d)表示匹配4位数字,如果字符串为2021abcd,</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021abcd"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"(\\d\\d)(\\d\\d)"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("matcher.group(0):"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组一:matcher.group(1):"+matcher.group(1)); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组二:matcher.group(2):"+matcher.group(2)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/b3b2b0dcf25db8f5d969778e4c12ae0e.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
结论:由此可见()会将正则分组,并按顺序给出编号,从1开始</p>
<p>
2) (?<a1>\\d\\d)(?<a2>\\d\\d)表示匹配4位数字,如果字符串位2021abcd</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021abcd"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"(?<a1>\\d\\d)(?<a2>\\d\\d)"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("matcher.group(0):"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组一:matcher.group(1):"+matcher.group(1)); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组二:matcher.group(2):"+matcher.group(2)); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组名a1:matcher.group(1):"+matcher.group("a1")); </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("分组名a2:matcher.group(2):"+matcher.group("a2")); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/a94da7f285728897cccf5bbf668839af.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
结论:由此可见()除了能将正则分组,还能按顺序给出编号,从1开始。还可以给分组取名字,并根据名字获取对应匹配的值</p>
<p class="maodian"></p><h3>
非捕获分组</h3>
<p>
1)如20(?:20|21|22)表示匹配2020|2021|2022</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021a2022B2023"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"20(?:20|21|22)"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/a7720926731dc806fb57ad434402e505.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
2)如20(?=20|21|22)表示匹配2020或2021或2022中的20</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021a2022B2023"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"20(?=20|21|22)"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span><span> </span>
</li>
<li class="alt">
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/c285a416b48238d5067d515605bf8afb.jpg" width="auto"></p>
<p>
这里匹配到的20,为2021和2022中的20</p>
<p>
3)如20(?!20|21|22)表示匹配不匹配2020或2021或2022中的20,匹配其它20</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span>public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"2021a2022B2023"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"20(?!20|21|22)"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span><span> </span>
</li>
<li class="alt">
<span> } </span>
</li>
<li>
<span>} </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/c06839f8e9b2b0ac4e40612851f87761.jpg" width="auto"></p>
<p>
这里匹配到的20为2023中的20</p>
<p class="maodian"></p><h3>
反向引用 </h3>
<ol class="dp-xml">
<li class="alt">
<span><span>/** </span></span><span> </span>
</li>
<li class="alt">
<span> * 反向引用 </span><span> </span>
</li>
<li class="alt">
<span> * 如果我们要找到一个字符串中连续4位威数字,并且第一位和第4位要相同,第二位和第三位相同。 </span><span> </span>
</li>
<li class="alt">
<span> * 这时候我们使用反向引用就很简单 </span><span> </span>
</li>
<li class="alt">
<span> * 反向引用的内部用法:\\n其中n代表分组号,如:字符串12345678870008,正则为(\\d)(\\d)\\2\\1 </span><span> </span>
</li>
<li class="alt">
<span> * 反向引用的外部用法:$n其中n代表分组号 </span><span> </span>
</li>
<li class="alt">
<span> */ </span>
</li>
</ol>
<p>
字符串12345678870008,正则为(\\d)(\\d)\\2\\1</p>
<ol class="dp-xml">
<li class="alt">
<span><span>@Test </span></span><span> </span>
</li>
<li class="alt">
<span> public void test2(){ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">str</span><span> = </span><span class="attribute-value">"12345678870008"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> /** </span><span> </span>
</li>
<li class="alt">
<span> * 第一个(\\d)会分配的组为1 </span><span> </span>
</li>
<li class="alt">
<span> * 第2个(\\d)会分配的组为2 </span><span> </span>
</li>
<li class="alt">
<span> * \\2:表示引用组2的值,因此2和3的值就会相同 </span><span> </span>
</li>
<li class="alt">
<span> * \\1:表示引用组1的值,因此1和4的值会相同 </span><span> </span>
</li>
<li class="alt">
<span> */ </span><span> </span>
</li>
<li class="alt">
<span> String <span class="attribute">regStr</span><span> = </span><span class="attribute-value">"(\\d)(\\d)\\2\\1"</span><span>; </span></span><span> </span>
</li>
<li class="alt">
<span> Pattern <span class="attribute">compile</span><span> = </span><span class="attribute-value">Pattern</span><span>.compile(regStr); </span></span><span> </span>
</li>
<li class="alt">
<span> Matcher <span class="attribute">matcher</span><span> = </span><span class="attribute-value">compile</span><span>.matcher(str); </span></span><span> </span>
</li>
<li class="alt">
<span> while(matcher.find()){ </span><span> </span>
</li>
<li class="alt">
<span> System.out.println("匹配到的数据为:"+matcher.group(0)); </span>
</li>
<li>
<span> } </span><span> </span>
</li>
<li class="alt">
<span> } </span>
</li>
</ol>
<p>
<img title="Linux Shell 正则表达式" alt="Linux Shell 正则表达式" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/afd8f767c1820fa26eb3d5be2b33f1aa.jpg" width="auto"></p>
<p>
结果展示</p>
<p>
原文链接:https://mp.weixin.qq.com/s/uJD7O_XsopwwMXdpPZJ0SA</p>
頁:
[1]