枫也木胜 發表於 2022-5-16 10:44:37

正则表达式中.+?与.*?的区别

<p>. 匹配除&ldquo;\r\n&rdquo;之外的任何单个字符。要匹配包括&ldquo;\r\n&rdquo;在内的任何字符,请使用像&ldquo;[\s\S]&rdquo;的模式。</p>
<table><tbody><tr><th>?</th><th>匹配前面的子表达式0到1次</th></tr><tr><td>*</td><td>匹配前面的子表达式人任意次</td></tr><tr><td>+</td><td>匹配前面的子表达式一次或多次&gt;=1)</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>?</td><td>匹配前面的子表达式0到1次</td></tr></tbody></table>
<p>加问号则表示为懒惰模式</p>
<ul><li>.+? 表示匹配任意字符一个或则多个</li><li>.*? 表示匹配任意字符0个或多个</li></ul>
<p>在具体使用时.+?可能跟好用些,看个人喜好</p>
<p>既然写了,顺带将正则的知识补全吧;;</p>
<p style="text-align:center"><img alt="在这里插入图片描述" src="https://img.jbzj.com/file_images/article/202205/2022051610425921.png" /></p>
<div class="jb51code"><pre class="brush:plain;"> "\b" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中"This is Regex"匹配单独的单词 "is" 正则就要写成 "\bis\b"

  \b 不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界

"\d": 匹配数字,
 
"\w":匹配字母,数字,下划线.

"\s":匹配空格

  
".":匹配除了换行符(\r\n)以外的任何字符

  这个算是"\w"的加强版了"\w"不能匹配 空格 如果把字符串加上空格用"\w"就受限了,
  用 "."是如何匹配字符"a23 4 5 B C D__TTz"正则:".+"
  
"": 字符组匹配包含括号内元素的字符

</pre></div>
<h3>匹配能力 ( . &gt; \w &gt; \d )</h3>
<p><strong>反义</strong>:<br />写法很简单改成<strong>大写</strong>就行了,这也很好理解;</p>
<div class="jb51code"><pre class="brush:plain;">   "\W"   匹配任意不是字母,数字,下划线 的字符

   "\S"   匹配任意不是空白符的字符

 "\D"匹配任意非数字的字符

   "\B"匹配不是单词开头或结束的位置

   "[^abc]"匹配除了abc以外的任意字符
"{n}"重复n次

</pre></div>
<p>例如从&quot;aaaaaaaa&quot; 匹配字符串的a 并重复3次 正则: &ldquo;a{3}&rdquo; 结果就是取到3个a字符 &ldquo;aaa&rdquo;;</p>
<p>&ldquo;{n,m}&rdquo; 重复n到m次</p>
<p>例如正则 &ldquo;a{3,4}&rdquo; 将a重复匹配3次或者4次 所以供匹配的字符可以是三个&quot;aaa&quot;也可以是四个&quot;aaaa&quot; 正则都可以匹配到</p>
<div class="jb51code"><pre class="brush:plain;">"{n,}" 重复n次或更多次</pre></div>
<p>与{n,m}不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则&quot;a{3,}&quot; a至少要重复3次</p>
<div class="jb51code"><pre class="brush:plain;">   "??"重复0次或1次,但尽可能少重复
</pre></div>
<p>如 &ldquo;aaacb&rdquo; 正则 &ldquo;a.??b&rdquo; 只会取到最后的三个字符&quot;acb&quot;</p>
<p>&ldquo;{n,m}?&rdquo; 重复n到m次,但尽可能少重复</p>
<div class="jb51code"><pre class="brush:plain;">如 "aaaaaa" 正则 "a{0,m}" 因为最少是0次所以取到结果为空</pre></div>
<p>&ldquo;{n,}?&rdquo; 重复n次以上,但尽可能少重复</p>
<div class="jb51code"><pre class="brush:plain;">如 "aaaaa" 正则 "a{1,}" 最少是1次所以取到结果为 "a"</pre></div>
<table><tbody><tr><th>n+</th><th>匹配n至少一次(&gt;=1)</th></tr><tr><td>n?</td><td>匹配n 0次 或一次 (有与无)</td></tr><tr><td>n*</td><td>匹配n 随意次(*可代表任意字母)</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>?=n</td><td>匹配任何其后紧接指定字符串 n 的字符串</td></tr><tr><td>?!n</td><td>匹配任何其后没有紧接指定字符串 n 的字符串。</td></tr></tbody></table>
<p>==&gt;两者相互等价</p>
<table><tbody><tr><th>n?</th><th>n{0,1}</th></tr><tr><td>n+</td><td>n{1,}</td></tr><tr><td>n*</td><td>n{0,}</td></tr></tbody></table>
頁: [1]
查看完整版本: 正则表达式中.+?与.*?的区别