中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正則表達式中的.*,.*?,.+?的含義是什么

發布時間:2021-09-02 10:00:27 來源:億速云 閱讀:350 作者:小新 欄目:互聯網科技

這篇文章將為大家詳細講解有關正則表達式中的.*,.*?,.+?的含義是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1. .*

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

2. .*?

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

3. .+?

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

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("根據pattern1匹配的結果:");
 if (m1.find()) {
 for(int i=0; i<=m1.groupCount(); i++){
 System.out.println(m1.group(i));
 }
 }

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

 System.out.println("根據pattern3匹配的結果:");
 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("根據pattern1切分的結果");
 for (int i=0; i< str1.length; i++) {
 System.out.println(str1[i]);
 }

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

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

5. 示例結果

正則表達式中的.*,.*?,.+?的含義是什么

關于“正則表達式中的.*,.*?,.+?的含義是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳林县| 阳江市| 巴楚县| 丹江口市| 靖远县| 邮箱| 阳东县| 桐乡市| 山阳县| 饶平县| 绍兴县| 墨玉县| 大城县| 淅川县| 师宗县| 花莲县| 海淀区| 北海市| 班玛县| 襄垣县| 和龙市| 大余县| 潮州市| 荣昌县| 斗六市| 闸北区| 南城县| 昔阳县| 米泉市| 宝鸡市| 鹿邑县| 安远县| 黑龙江省| 哈密市| 五峰| 永兴县| 南汇区| 仁怀市| 宁都县| 雷波县| 临潭县|