欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

關(guān)于正則表達(dá)式中的.*,.*?,.+?的理解 - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(shí)

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!

您當(dāng)前位置>首頁(yè) » 新聞資訊 » 技術(shù)分享 >

關(guān)于正則表達(dá)式中的.*,.*?,.+?的理解

發(fā)表時(shí)間:2019-7-5

發(fā)布人:葵宇科技

瀏覽次數(shù):224

1. .*

. 表示 匹配除換行符 \n 之外的任何單字符,*表示零次或多次。所以.*在一起就表示任意字符出現(xiàn)零次或多次。沒(méi)有?表示貪婪模式。比如a.*b,它將會(huì)匹配最長(zhǎng)的以a開(kāi)始,以b結(jié)束的字符串。如果用它來(lái)搜索aabab的話,它會(huì)匹配整個(gè)字符串aabab。這被稱為貪婪匹配。
又比如模式src=`.*`, 它將會(huì)匹配最長(zhǎng)的以 src=` 開(kāi)始,以`結(jié)束的最長(zhǎng)的字符串。用它來(lái)搜索 <img src=``test.jpg` width=`60px` height=`80px`/> 時(shí),將會(huì)返回 src=``test.jpg` width=`60px` height=`80px`

2. .*?

?跟在*或者+后邊用時(shí),表示懶惰模式。也稱非貪婪模式。就是匹配盡可能少的字符。就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)。
a.*?b匹配最短的,以a開(kāi)始,以b結(jié)束的字符串。如果把它應(yīng)用于aabab的話,它會(huì)匹配aab(第一到第三個(gè)字符)和ab(第四到第五個(gè)字符)。
又比如模式 src=`.*?`,它將會(huì)匹配 src=` 開(kāi)始,以 ` 結(jié)束的盡可能短的字符串。且開(kāi)始和結(jié)束中間可以沒(méi)有字符,因?yàn)?表示零到多個(gè)。用它來(lái)搜索 <img src=``test.jpg` width=`60px` height=`80px`/> 時(shí),將會(huì)返回 src=``。

3. .+?

同上,?跟在*或者+后邊用時(shí),表示懶惰模式。也稱非貪婪模式。就意味著匹配任意數(shù)量的重復(fù),但是在能使整個(gè)匹配成功的前提下使用最少的重復(fù)。
a.+?b匹配最短的,以a開(kāi)始,以b結(jié)束的字符串,但a和b中間至少要有一個(gè)字符。如果把它應(yīng)用于ababccaab的話,它會(huì)匹配abab(第一到第四個(gè)字符)和aab(第七到第九個(gè)字符)。注意此時(shí)匹配結(jié)果不是ab,abaab。因?yàn)閍和b中間至少要有一個(gè)字符。
又比如模式 src=`.+?`,它將會(huì)匹配 src=` 開(kāi)始,以 ` 結(jié)束的盡可能短的字符串。且開(kāi)始和結(jié)束中間必須有字符,因?yàn)?#43;表示1到多個(gè)。用它來(lái)搜索 <img src=``test.jpg` width=`60px` height=`80px`/> 時(shí),將會(huì)返回 src=``test.jpg`。注意與.*?時(shí)的區(qū)別,此時(shí)不會(huì)匹配src=``,因?yàn)?strong>src=` 和 ` 之間至少有一個(gè)字符。

4. 示例代碼

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.jupiter.api.Test;

public class TestRegx {

  @Test
  public void testRegx(){

    String str = "<img src=``test.jpg` width=`60px` height=`80px`/>";

    String pattern1 = "src=`.*`";
    String pattern2 = "src=`.*?`";
    String pattern3 = "src=`.+?`";

    Pattern p1 = Pattern.compile(pattern1);
    Pattern p2 = Pattern.compile(pattern2);
    Pattern p3 = Pattern.compile(pattern3);

    Matcher m1 = p1.matcher(str);
    Matcher m2 = p2.matcher(str);
    Matcher m3 = p3.matcher(str);

    System.out.println("根據(jù)pattern1匹配的結(jié)果:");
    if (m1.find()) {
      for(int i=0; i<=m1.groupCount(); i++){
        System.out.println(m1.group(i));
      }
    }

    System.out.println("根據(jù)pattern2匹配的結(jié)果:");
    if (m2.find()) {
      for(int i=0; i<=m2.groupCount(); i++){
        System.out.println(m2.group(i));
      }
    }

    System.out.println("根據(jù)pattern3匹配的結(jié)果:");
    if (m3.find()) {
      for(int i=0; i<=m3.groupCount(); i++){
        System.out.println(m3.group(i));
      }
    }

    String[] str1 = p1.split(str);
    String[] str2 = p2.split(str);
    String[] str3 = p3.split(str);

    System.out.println("根據(jù)pattern1切分的結(jié)果");
    for (int i=0; i< str1.length; i++) {
      System.out.println(str1[i]);
    }

    System.out.println("根據(jù)pattern2切分的結(jié)果");
    for (int i=0; i< str2.length; i++) {
      System.out.println(str2[i]);
    }

    System.out.println("根據(jù)pattern3切分的結(jié)果");
    for (int i=0; i< str3.length; i++) {
      System.out.println(str3[i]);
    }
  }
}

5. 示例結(jié)果

在這里插入圖片描述

相關(guān)案例查看更多