正則表達式個人總結(一):正則表達式語法的深入理解第一部分

来源:http://www.cnblogs.com/hanhanhan/archive/2016/08/18/5785613.html
-Advertisement-
Play Games

前言: 正則表達是就是用特殊字元組成的有一定規則的邏輯公式(規則字元串),主要用於對字元串進行過濾操作。 正則表達式的三個功能: 1.快速匹配指定的字元串; 2.替換遵照正則表達式規則的字元串; 3.在目標字元串中篩選指定的子字元串; 正則表達式的語法: 正則表達式是由普通字元(例如:a-z)和元字 ...


前言:

正則表達是就是用特殊字元組成的有一定規則的邏輯公式(規則字元串),主要用於對字元串進行過濾操作。

  正則表達式的三個功能: 1.快速匹配指定的字元串; 2.替換遵照正則表達式規則的字元串; 3.在目標字元串中篩選指定的子字元串;   正則表達式的語法: 正則表達式是由普通字元(例如:a-z)和元字元(特殊字元)組成的文字模式,正則表達式作為一個模板(規則字元串,將目標字元串與所搜索的字元串進行匹配)   一.創建正則表達式對象 RegExp: regular expression  正則表達式對象的創建類似於數組對象的創建   構建正則表達式對象時使用的構造函數有兩個參數:   1.待匹配的字元串模板   2.是匹配的模式,其中三種模式,這三種模式可以組合使用       i:不區分大小寫       g:全局查找,整個目標字元串範圍內       m:多行查找   (1)var reg = new RegExp(‘abc’);   (2)reg = new RegExp('abc', 'g’);   (3)var regExp = /abc/gi;(正則表達式的簡寫形式,字面量形式雙斜杠中包含的就是要被匹配的文字,雙斜杠後面就是模式組合,//定界,裡面的是規則字元串 ) 二.語法詳解 1.修飾符

 

<script type="text/javascript">
  var str = 'Love me';
  var reg = /love/g;
  console.log(reg.test(str));
  // 控制台輸出:false
  </script>
 
<script type="text/javascript">
  var str = 'Love me';
  var reg = /love/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

 

註:這裡的test方法是正則表達式的一個方法,主要作用是用規則字元串去檢索目標字元串,匹配成功則返回ture否則返回false。對於本文的字元串的匹配成功與否本文都將採用此方法。 註:在理解正則表達式的的匹配方式的時候可以這樣理解;首先要將目標字元和規定字元看做是一個一個的字元,然後在目標字元串中檢索規則字元的第一個l這個字元,如果檢索匹配成功,接下來去檢所規則字元串中的o是否能和目標字元串上一次匹配 成功的下一個字元匹配成功,成功則繼續匹配,否則匹配失敗,執行相關操作。

 2.元字元

對於這個看後面的描述就大致可以知道意思,在此不做解釋。

3.量詞

量詞:量詞規定了匹配成功至少需要的次數下限,以及嘗試匹配的次數上限,即量詞前字元或者字元數組重覆必須滿足的次數下限,及嘗試(深刻理解嘗試這個概念)重覆的上限;在理解量詞的時候要學會等價的概念。 先對這些量詞進行解釋:+,*,?,{x},{x,y},^,$   (1)+ +表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組(字元組概念下麵會進行闡述),至少目標字元串中有一個該字元或字元組; 等價於{1,} 例子:  
<script type="text/javascript">
  var str = '211211111';
  var reg = /1+/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

 

(2)* *表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組,匹配儘可能多的次數,一次也沒匹配成功也無所謂; 等價於{0,} 例子:  
<script type="text/javascript">
  var str = '211211111';
  var reg = /1*/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

 

<script type="text/javascript">
  var str = '211211111';
  var reg = /3*/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>
  (3)? ?表示在目標字元串中檢索匹配正則表達式中*前的字元或者字元組,至少匹配0次,嘗試匹配1次,即使匹配1次失敗也無所謂; 等價於{0,1} 例子:  
<script type="text/javascript">
  var str = '211211111';
  var reg = /1?/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

 

<script type="text/javascript">
  var str = '211211111';
  var reg = /3?/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>
  (4){x} {x}表示在目標字元串中檢索匹配正則表達式中{x}前的字元或者字元組,必須在目標字元串中找到重覆x次的該量詞前的字元,否則就算匹配失敗; 例子:  
  <script type="text/javascript">
  var str = '211211111';
  var reg = /1{7}/gi;
  console.log(reg.test(str));
  // 控制台輸出:false
  </script>
  (5){x,y} {x,y}表示在目標字元串中檢索匹配正則表達式中{x}前的字元或者字元組,必須在目標字元串中找到量詞前重覆x次的字元,如果匹配成功,在此基礎之上儘可能去嘗試找到重覆次數為y的字元組成的字元串,如果未匹配到重覆次數y次的字元組成的字元串也沒關係,退而求其次找到重覆y-1次的也可,如果仍未找到,那麼繼續減少重覆次數,但是前提條件是,必須重覆x次,因此x是限制能否匹配成功的必須條件 例子:  
<script type="text/javascript">
  var str = '211211111';
  var reg = /1{3,12}/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

註:這裡的12改成更大的數也依舊會返回true

<script type="text/javascript">
  var str = '211211111';
  var reg = /1{7,12}/gi;
  console.log(reg.test(str));
  // 控制台輸出:false
  </script>
  (6)^ ^表示的就是匹配必須以該量詞之後的字元開頭的目標字元 對於^love 可以這樣理解: 匹配的是以l作為一行的第一個字元,緊跟一個o,緊跟一個v,緊跟一個e的文本  
<script type="text/javascript">
  var str = 'love me';
  var reg = /^love/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>

 

(7)$

$表示的就是匹配必須以該量詞之前的字元結尾的目標字元

 

<script type="text/javascript">
  var str = 'love me';
  var reg = /me$/gi;
  console.log(reg.test(str));
  // 控制台輸出:ture
  </script>
$^他們匹配的是一個位置,而不是具體的文本,

 註:本文表格截屏自W3C的正則表達式的表格。

對於選擇,分組等語法在下一部分會詳細介紹,以上內容純屬個人總結理解。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、函數式介面 函數式介面(functional interface 也叫功能性介面,其實是同一個東西)。簡單來說,函數式介面是只包含一個方法的介面。比如Java標準庫中的java.lang.Runnable和 java.util.Comparator都是典型的函數式介面。java 8提供 @Fun ...
  • 3732 解方程 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 鑽石 Diamond 題解 3732 解方程 3732 解方程 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 鑽石 Diamond 時間限制: 1 s 空間限制: 128000 KB 題目等級 : ...
  • yield實現斐波那契序列: Send: send函數用來向fib_iter發送數據,這樣數據就可以雙向流動。我們嘗試使用send來模擬一個比較慢的生成器,我們讓它一秒鐘生成一個數: yield from 是什麼? 在上面的yield中,我們通過for迴圈使用__next__()方法來獲取下一個值, ...
  • 代碼: package test.extend; public class Base { public Base(){ System.out.println("基類構造"); say(); } public void say(){ System.out.println("我是基類"); } publ... ...
  • 0.前提條件 環境兩台ubuntu版本14.04 64位系統(並獲取root許可權) 假設兩台伺服器ip為:172.16.34.214(master),172.16.34.215(backup),keepalived的虛擬ip為172.16.34.216 兩台ubuntu系統上裝好docker,版本如 ...
  • owlcarousel是一款貓頭鷹旋轉木馬插件。OwlCarousel優勢相容所有瀏覽器支持響應式支持 CSS3 過度支持觸摸事件支持 JSON 及自定義 JSON 格式支持進度條支持自定義事件支持延遲載入支持自適應高度 線上實例 使用方法 複製 複製 參數詳解 itemsCustom itemsS ...
  • 一、頁面可見性(visibility) 主要提供兩個屬性,一個事件(都在document對象上):1. 屬性: 1.1. hidden:獲取或設置當前頁面的可見性,boolean值; 1.2. visibilityState: 獲取當前頁面可見性狀態,值為hidden、visibility其中一個2... ...
  • 1、 常用屬性:①color:文本顏色;②background-color:背景顏色;③font-size:文字大小; 2、 樣式聲明:①內部樣式:style=“樣式規則;”,寫於作用標簽內,優先順序最高;②內聯樣式:<style>樣式規則</style>,寫於head標簽內,優先順序其次;③外聯樣式: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...