淡淡汉子味 發表於 2024-8-12 11:04:37

正则表达式中小括号、中括号、大括号的作用详细讲解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">小括号()</a></li><li><a href="#_label1">中括号[]</a></li><li><a href="#_label2">大括号{}</a></li><li><a href="#_label3">附:正则表达式:(\s*)[\s*]{\s*} 区别</a></li><li><a href="#_label4">总结</a></li></ul></div><p>在正则表达式中,小括号&nbsp;<code>()</code>、中括号&nbsp;<code>[]</code>&nbsp;和大括号&nbsp;<code>{}</code>&nbsp;各自具有特定的含义:</p>
<p class="maodian"><a name="_label0"></a></p><h2>小括号()</h2>
<ul><li><strong>分组</strong>:</li></ul>
<p>小括号用于将正则表达式的一部分组合在一起,形成一个分组。</p>
<p>这对于后续的<code>引用</code>、<code>条件判断</code>或者<code>捕获匹配结果</code>非常有用。</p>
<p>小括号就是分组</p>
<ul><li><strong>捕获分组</strong>:</li></ul>
<p>当正则表达式中使用小括号时,它会创建一个捕获分组。</p>
<p><code>(pattern)</code>这就是一个捕获分组。</p>
<p>这意味着匹配到的、该分组的内容,可以在后续的操作中被<code>单独提取</code>或<code>使用</code>。</p>
<ul><li><strong>非捕获分组</strong></li></ul>
<p>如果你不希望捕获某个分组的内容,</p>
<p>可以在小括号内加上&nbsp;<code>?:</code>&nbsp;来创建一个非捕获分组,</p>
<p>例如&nbsp;<code>(?:pattern)</code>。</p>
<ul><li><strong>条件判断</strong>:</li></ul>
<p>在某些支持正则表达式的语言中,</p>
<p>小括号可以用于实现条件判断,</p>
<p>如<code>&ldquo;前瞻断言&rdquo;</code>或<code>&ldquo;后顾断言&rdquo;</code>。</p>
<blockquote><p>这一块,我会单独讲的,这里就不讲了。</p></blockquote>
<p class="maodian"><a name="_label1"></a></p><h2>中括号[]</h2>
<ul><li><strong>字符集</strong></li></ul>
<p>中括号用于定义一个字符集,表示匹配方括号中的任意一个字符。</p>
<p>例如,<code></code>&nbsp;将匹配字符 &lsquo;a&rsquo;、&lsquo;b&rsquo; 或 &lsquo;c&rsquo;。</p>
<ul><li><strong>范围</strong></li></ul>
<p>在中括号内,你可以使用连字符&nbsp;<code>-</code>&nbsp;来表示字符的范围。</p>
<p>例如,<code></code>&nbsp;将匹配任意小写字母。</p>
<ul><li><strong>否定字符集</strong></li></ul>
<p>在中括号的最开始加上<code>^</code>符号,</p>
<p>可以表示否定字符集,</p>
<p>即匹配不在方括号中的任意一个字符。</p>
<p>例如,<code>[^0-9]</code>将匹配任意非数字字符。</p>
<ul><li><strong>特殊字符</strong></li></ul>
<p>在中括号内,一些正则表达式中的特殊字符(如&nbsp;<code>.</code>、<code>*</code>、<code>+</code>&nbsp;等)</p>
<p>将失去其特殊含义,而只表示字面字符。</p>
<p>这一点是要注意的。</p>
<p class="maodian"><a name="_label2"></a></p><h2>大括号{}</h2>
<ul><li><strong>限定符</strong></li></ul>
<p>大括号用于指定前面字符或分组的出现次数。</p>
<p>例如,<code>a{3}</code>&nbsp;将匹配三个连续的 &lsquo;a&rsquo; 字符。</p>
<ul><li><strong>范围</strong></li></ul>
<p>在大括号内,你可以使用逗号&nbsp;<code>,</code>&nbsp;来指定一个范围,</p>
<p>表示前面的字符或分组至少出现多少次,最多出现多少次。</p>
<p>例如,<code>a{1,3}</code>&nbsp;将匹配一个到三个连续的 &lsquo;a&rsquo; 字符。</p>
<ul><li><strong>贪婪与非贪婪</strong></li></ul>
<p>当使用大括号时,默认是贪婪匹配,即尽可能多地匹配字符。</p>
<p>如果你想进行非贪婪匹配(尽可能少地匹配字符),</p>
<p>可以在大括号后面加上&nbsp;<code>?</code>,如&nbsp;<code>a{1,3}?</code>。</p>
<p class="maodian"><a name="_label3"></a></p><h2>附:正则表达式:(\s*)[\s*]{\s*} 区别</h2>
<p>正则表达式的() [] {}有不同的意思。</p>
<p>() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。</p>
<p>(\s*)表示连续空格的字符串。</p>
<p>[]是定义匹配的字符范围。比如 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。</p>
<p>{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s表示匹配一到三个空格。(0-9) 匹配 &#39;0-9&#39; 本身。 * 匹配数字(注意后面有 *,可以为空)+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。 {0,9} 表示长度为 0 到 9 的数字字符串。</p>
<p>过滤内容里面有数或空格数字</p>
<div class="jb51code"><pre class="brush:js;">preg_replace("/\d{1,}\s{0,1}/", "xxxxxxxx", $signaturecontent);</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>总结</h2>
<p>小括号是分组、中括号是内容、大括号是次数。</p>
頁: [1]
查看完整版本: 正则表达式中小括号、中括号、大括号的作用详细讲解