伟峰 發表於 2022-8-9 09:26:09

正则表达式中^和$的含义与实例代码

<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">总结</a></li></ul></div><p>前前一期说了<a href="https://www.jb51.net/article/258542.htm" target="_blank">正则表达式校验金额最多保留两位小数</a>(感兴趣的小伙伴可以过去看看)</p>
<p>其中提到了^和$,当时只是简单说明了这个表达式,今天来详细说明一下使用方法</p>
<p class="maodian"><a name="_label0"></a></p><h2>先说明一下两个表达式含义:</h2>
<ul><li>^匹配开始位置</li><li>$匹配结束位置</li></ul>
<p>来看个简单的demo</p>
<div class="jb51code"><pre class="brush:java;">import java.util.regex.Pattern;

/**
* @author yanghao
* @version PatternTest.java, v 0.1 2019-03-30 09:41
*/
public class PatternTest {

    /**
   * 待匹配字符串
   */
    private static final String tempStr = "A.B.C.D";

    /**
   * 匹配开始位置表达式
   */
    private static final Pattern PATTERN_START = Pattern.compile("^A");

    /**
   * 匹配结束位置表达式
   */
    private static final Pattern PATTERN_END = Pattern.compile("D$");

    public static void main(String[] args){
      System.out.println("PATTERN_START === " + PATTERN_START.matcher(tempStr).replaceAll("demo"));
      System.out.println("PATTERN_END === " + PATTERN_END.matcher(tempStr).replaceAll("demo"));
    }
}
</pre></div>
<p>运行结果如下:</p>
<blockquote><p>PATTERN_START === demo.B.C.D<br />PATTERN_END === A.B.C.demo</p></blockquote>
<p>从运行结果可以看出,待匹配字符串的开始和结尾已经被替换掉了</p>
<p class="maodian"><a name="_label1"></a></p><h2>我们在来看下,非开头和结尾的情况</h2>
<p>编写demo如下:</p>
<div class="jb51code"><pre class="brush:java;">import java.util.regex.Pattern;

/**
* @author yanghao
* @version PatternTest.java, v 0.1 2019-03-30 09:41
*/
public class PatternTest {

    /**
   * 待匹配字符串
   */
    private static final String tempStr = "A.B.C.D";

    /**
   * 开始+中间字符串表达式
   */
    private static final Pattern PATTERN_START_MIDDLE = Pattern.compile("^B");

    /**
   * 中间字符串表达式
   */
    private static final Pattern PATTERN_MIDDLE = Pattern.compile("B");

    public static void main(String[] args){
      System.out.println("PATTERN_START_MIDDLE === " + PATTERN_START_MIDDLE.matcher(tempStr).replaceAll("demo"));
      System.out.println("PATTERN_MIDDLE === " + PATTERN_MIDDLE.matcher(tempStr).replaceAll("demo"));
    }
}
</pre></div>
<p>运行结果如下:</p>
<blockquote><p>PATTERN_START_MIDDLE === A.B.C.D<br />PATTERN_MIDDLE === A.demo.C.D</p></blockquote>
<p><strong>此测试结果可以看出,如果加了^表达式,表示一定要以此为开始才能匹配到,那么同理,$表达式一定要以此为结尾才能匹配到,小伙伴们可以自己去写个demo测试一下?</strong></p>
<p class="maodian"><a name="_label2"></a></p><h2>附:在正则表达式中^ 和 $ 同时出现的含义</h2>
<p>当 ^ 和 $ 同时出现时,表示只能匹配 ^ 和 $ 之间的内容,例:</p>
<blockquote><p>/^abc$/ &nbsp;只能匹配&#39;abc&#39;</p></blockquote>
<p>容易被理解为abcabc这种形式的也是可以的,但其实不行。</p>
<p>准确来说这么理解:</p>
<p>必须以a开头,必须以c结束,a和c的中间只写了b,所以只能匹配&rsquo;abc&rsquo;。</p>
<p>&lsquo;abcabc&rsquo;的开头a和结尾c中间是&rsquo;bcab&rsquo;,与&rsquo;b&rsquo;没有任何关联,所以不对。</p>
<blockquote><p>/^a.c$/ &nbsp;可以匹配a加任意单个字符加c,比如abc,aec,acc,a2c等</p></blockquote>
<p class="maodian"><a name="_label3"></a></p><h2>总结</h2>
頁: [1]
查看完整版本: 正则表达式中^和$的含义与实例代码