解析正則表達式中的.*,.*?,.+?的含義_正則表達式

來源:腳本之家  責任編輯:小易  

如果你是想獲取字串中的數字 那你這段代碼是有問題的 正則表達式也是有問題的 你應該這樣用public static void main(String[]args){String str="abc$31.8zhe;String reg="[0-9\\\\.]+;Pattern p=Pattern.compile(reg);Matcher m=p.matcher(str);m.find();System.out.println(m.group());}[0-9\\\\.]+表示的意思是匹配0-9的數字和.本身"."確實是需要轉義的 而且因為在Java中"\\"本身就是轉義符 所以還需要再次轉義 因此變成了"\\\\."+表示匹配一次或者多次實際上0-9可以用\\\\d 代替 \\d就表示匹配所有數字當然這個表達式本身也不完善 比如它會匹配到類似與23.這樣的串 即使小數點后沒有數字樓主你會發現正則表達式和結果相反是因為你可能使用了replaceAll("")它將所有匹配的片段替換為空 因此你的[^0-9\\\\.]其實是匹配了除了0-9和"."之外的所有字符 那些字符都被替換成了空 最后你的字串中的abc$zhe被干掉了 而只有沒法匹配[^0-9\\\\.]的31.8被留了下來www.13333515.buzz防采集請勿采集本網。

1. .*

去看正則的教程吧,我知道易語言官方論壇有個文檔 一些符號 以及表達式還是很齊的,你可以對著那個表格 已經幾個表達式一點一點解析。除了常用的幾個,我也是對著表格,已經要匹配的內容寫正則表達式。

. 表示匹配除換行符 \n 之外的任何單字符,*表示零次或多次。所以.*在一起就表示任意字符出現零次或多次。沒有?表示貪婪模式。比如a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱為貪婪匹配。

.是除了\\n的任意字符 是取之前字符的0個或者n個 是去之前字符的0個或者1個;也可以解釋為非貪婪模式 這三個組合在一起的含義就是:0個或者任意個不是\\n的任意字符(非貪婪模式,發現一個就立即

又比如模式src=`.*`, 它將會匹配最長的以 src=` 開始,以`結束的最長的字符串。用它來搜索 <img src=``test.jpg` width=`60px` height=`80px`/> 時,將會返回 src=``test.jpg` width=`60px` height=`80px`

2. .*?

先看要解析的樣例SQL語句: select*from dual SELECT*frOm dual Select C1,c2 From tb select c1,c2 from tb select count(*)from t1 select c1,c2,c3 from t1 where condi1=1 Select c1,c2,c3

?跟在*或者+后邊用時,表示懶惰模式。也稱非貪婪模式。就是匹配盡可能少的字符。就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。

/\\{\\{(.+?\\}\\}/g 最前面的“/”與最后面的“/”是分隔符,表示正則表達式的開始與結束。最后的“g”標志則表示正則表達式使用的global(全局)的狀態。使用 global 標志表明在被查找的字符串中

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. 示例結果

在這里插入圖片描述

總結

到此這篇關于解析正則表達式中的.*,.*?,.+?的含義的文章就介紹到這了,更多相關正則表達式.*,.*?,.+?內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

你的式子不對,你的文本中缺少一個,你的式子應用到你給的這些文本中其得到的結果會是整個文本。從開頭,到最后的結束。如果你的文本不屬于一個整行,并且你的.(點號)沒有開啟匹配換行的功能,你的式子將匹配不到任何文本。另外:你的式子寫得讓人不明白你想解析后具體得到什么,總之,你的式子對應如下文本:本文介紹的是位于北京"class="mw-redirect">北京紫禁城">紫禁城的博物館。解析結果將是:(4個元組)組1:本文介紹的是位于組2:北京"class="mw-redirect">北京組3:北京組4:>紫禁城">紫禁城的博物館。想要解決問題首先要描述清楚問題。有問題再追問內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • 正則表達式(regexp)判斷文本框中是否包含特殊符號
  • python 正則表達式獲取字符串中所有的日期和時間
  • jmeter設置全局變量與正則表達式提取器過程圖解
  • 正則表達式匹配各種特殊字符
  • 讓editplus3 函數模板完全顯示函數
  • 如何實現正則表達式的javascript的代碼高亮
  • asp的regexp對象正則表達式功能用法[比較全]
  • 解決正則表達式\w和\d的疑惑
  • 正則表達式實現將mm/dd/yyyy格式的日期轉換為yyyy-mm-dd格式
  • 正則表達式實現字符串每4位后自動加空格效果(兩種方法)
  • javascript正則表達式驗證中文實例講解
  • c# 正則表達式對網頁進行有效內容抽取
  • 正則獲取圖片地址 鏈接地址
  • javascript email郵箱/郵件地址的正則表達式及分析
  • 正則表達式解析網頁
  • java的正則表達式解析
  • 請問正則表達式是什么意思?在網頁解析中有什么作用?
  • 解析正則表達式
  • 正則表達式解讀。
  • 正則表達式中 .*? 代表什么?
  • 正則表達式中的*是什么意思
  • 怎么用正則表達式解析sql語句
  • 正則表達式([^[<]+?])和([^["']+?)是什么意思啊?
  • JAVA正則表達式解析HTML字符串
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全javascriptasp.netphp編程ajax相關正則表達式asp編程jsp編程編程10000問css/htmlflex腳本加解密web2.0xml/rss網頁編輯器相關技巧安全相關網頁播放器其它綜合dart首頁正則表達式正則表達式(regexp)判斷文本框中是否包含特殊符號python 正則表達式獲取字符串中所有的日期和時間jmeter設置全局變量與正則表達式提取器過程圖解正則表達式匹配各種特殊字符讓editplus3 函數模板完全顯示函數如何實現正則表達式的javascript的代碼高亮asp的regexp對象正則表達式功能用法[比較全]解決正則表達式\w和\d的疑惑正則表達式實現將mm/dd/yyyy格式的日期轉換為yyyy-mm-dd格式正則表達式實現字符串每4位后自動加空格效果(兩種方法)javascript正則表達式驗證中文實例講解c# 正則表達式對網頁進行有效內容抽取正則獲取圖片地址 鏈接地址javascript email郵箱/郵件地址的正則表達式及分析java 正則表達式詳解比較正宗的驗證郵箱的正則表達式正則表達式匹配任意字符(包括換最新手機號碼、電話號碼正則表達javascript 手機號碼正則表達式驗js利用正則配合replace替換指定字正則表達式匹配不包含某些字符串正則中需要轉義的特殊字符小結js正則函數match、exec、test、s最全的常用正則表達式大全——包匹配form表單中所有內容的正則表達式js使用正則去除字符串最后的逗號正則表達式去除中括號(符號)及里面包含php 正則表達式 推薦經典javascript正則表達式實戰(附pdf)正則表達式匹配解析過程探討分析(正則表達可以少寫1000行代碼的正則表達式extjs4的文本框(textfield)使用正則表達式編寫采集規則的好幫手—regexbuddy 下載,將 html 轉成 ubb代碼的小腳本
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果