首頁 > 後端開發 > php教程 > 用實際的例子揭開正面的神秘面紗

用實際的例子揭開正面的神秘面紗

Jennifer Aniston
發布: 2025-02-16 12:49:10
原創
953 人瀏覽過

用實際的例子揭開正面的神秘面紗

鑰匙要點

  • 正則表達式(REGEX)是開發人員的寶貴工具,用於諸如日誌分析,形式提交驗證並查找和替換操作之類的任務。了解如何有效構建和使用正則表達式可以大大提高生產率和效率。
  • 構建良好的正則是定義場景,制定計劃以及實施/測試/重構。重要的是要了解允許的字符類型,角色必須出現多少次以及要遵循的任何約束。 REGEX用法的實際示例
  • 包括匹配密碼,URL,特定的HTML標籤和重複的單詞。這些示例證明了字符範圍,斷言,條件,群體等的使用。
  • >
  • > REGEX是一種強大的工具,但它也可能很複雜且難以管理。因此,有時使用幾個較小的正直而不是一個大的正則是更有效的。注意小組捕獲也可能使匹配對於進一步的處理更有用。
  • >
  • 正則表達式通常用於執行搜索,替換子字符串和驗證字符串數據。本文提供了通過複雜的正則表達式進行的提示,技巧,資源和步驟。 如果您沒有基本技能,則可以通過我們的初學者指南學習正則表達式。作為正則表達式的奧術,您不會花很長時間學習這些概念。 有許多書籍,文章,網站來解釋正則表達式,因此,我不想寫另一個說明,而是要直接進行更實用的例子:
匹配密碼
  • 匹配url
  • 匹配特定的HTML標籤
  • 匹配重複的單詞
  • 您可以在此鏈接上找到有用的備忘單。除了大量有用的資源外,Lea Verou在這篇文章的底部還有一個會議視頻 - 它有點長,但在打破正則表達式方面非常出色。
  • 如何構建良好的正則
正則表達式通常在開發人員的日常工作中使用 - 日誌分析,形式提交驗證,查找和替換等等。這就是為什麼每個好的開發人員都應該知道如何使用它們,但是建造好的正則是什麼最佳實踐是什麼?

1。定義方案

使用自然語言來定義問題,將使您更好地了解使用方法。這些單詞可以和必須在定義中使用,可用於描述強制性約束或斷言。 以下是一個示例:

字符串必須以“ H”開頭,並以“ O”結束(例如,Hello,Halo)。
  • 字符串可以包裹在括號中。
  • 2。制定計劃
對問題有很好的定義後,我們可以理解我們的正則表達中涉及的元素類型:

允許的字符類型(字,數字,新行,範圍,…)?
  • 一個角色必須出現多少次(一個或多個,一次,…)? 在
  • 3。實施/測試/重構
  • 擁有實時測試環境以測試和改善正則表達非常重要。有Regex101.com,Regexr.com和Debuggex.com等網站提供一些最佳環境。 為了提高正則效率,您可以嘗試回答以下其他問題:

    字符類是否正確定義了特定域?

    >
      我應該編寫更多測試字符串以涵蓋更多用例嗎?
    • 是否可以找到和隔離一些問題並分別測試它們?
    • >我應該用子圖案,組,條件等重構表達式,以使其更小,更清晰,更靈活?
    • >
    • 實例
    • 以下示例的目的不是寫一個只能解決問題的表達式,而是使用特定用例,使用字符範圍,斷言,條件,群體等的重要元素編寫最有效的表達式。
    • 匹配密碼

    設想:

    長度

    6至12個字符

    用實際的例子揭開正面的神秘面紗必須至少有一個大寫字母
    • >必須至少有一個下部案例字母
    • 必須至少有一個數字
    • >
    • 應包含其他字符
    • >
    • 圖案: ^(?=。*[a-z])(?=。*[a-z])(?=。*d)。 {6,12} $ 此表達式基於多個正lookahead(?=(REGEX))。 LookAhead匹配了一些聲明(Regex)的東西。條件的順序不會影響結果。當有幾種條件時,外觀表達式非常有用。 我們還可以使用負LookAhead(?!(REGEX))排除某些角色範圍。例如,我可以將%排除(?!。*#)。 讓我們解釋以上表達的每種模式:
    • ^在字符串開始時斷言位置
    (?=。*[a-z])正lookahead,斷言正則是。 *[a-z]可以匹配:
    1. 。 *匹配零和無限時間之間的任何字符(新線)
    2. [A-Z]匹配A和z之間的範圍內的一個字符
      • (?=。*[a-z])正lookahead,斷言正則是。 *[a-z]可以匹配:
      • 。 *匹配零和無限時間之間的任何字符(新線)
    3. [A-Z]匹配A和Z之間的單個字符(情況敏感)
    4. >
      • (?=。 *d)積極的lookahead,斷言正則 *dcan是匹配的:
      • 。 *匹配零和無限時間之間的任何字符(新線)
    5. d匹配數字[0-9]
      • 。 {6,12}匹配6至12次
    6. 之間的任何字符(Newline除外)
    7. $斷言字符串末尾的位置

    匹配的URL

    用實際的例子揭開正面的神秘面紗 設想:
    • 必須從http或https或ftp開始,然後是://
    • >
    • 必須匹配有效的域名
    • 可以包含端口規範(http://www.sitepoint.com:80)
    • 可以包含數字,字母,點,連字符,前向斜線,多次
    圖案: ^(http | https | ftp):[/] {2}([a-za-z0-9--。]。[a-za-z] {2,4})(:[0-9]) ? /? ([A-ZA-Z0-9 -._??,'/\&%$#=〜]*)*) 使用 ^(http | https | ftp):[/] {2}的第一種情況很容易解決。 要匹配域名,我們需要牢記,要有效,它只能包含字母,數字,連字符和點。在我的示例中,我將標點符號後的字符數量從2到4限制在2到4,但可以擴展到.Rocks或。編碼等新域。域名匹配([A-ZA-Z0-9-。]。[A-ZA-Z] {2,4})。 可選端口規範與簡單(:[0-9])? 一個URL可以包含多次重複多次的多個斜線和多個字符(請參閱RFC3986),通過在組中使用一系列字符可以匹配([a-za-Z0-9-._??,' /\&%$ #=〜]*)。 將每個重要元素與組捕獲()匹配非常有用,因為它將僅返回我們需要的匹配項。請記住,某些角色需要逃脫。 下面,每個副本都解釋了:
    1. ^在字符串開始時斷言位置
    2. 捕獲組(http | https | ftp),捕獲http或https或ftp
    3. :逃脫的角色,匹配角色:字面意思
    4. [ /] {2}恰好匹配逃脫的字符 /
    5. 的2倍
    6. 捕獲組([A-ZA-Z0-9-。]。[A-ZA-Z] {2,4}):
      • [A-ZA-Z0-9-。 ]匹配A和z,a和z,z,0和9之間的一個和無限的時間字符,字面字符和字符。從字面上看
      • 。匹配角色。從字面上看
      • [a-za-z] {2,4}匹配A和Z或A和Z之間的2至4倍(CASE敏感)>
    7. 捕獲組(:[0-9])?
      • 量詞?匹配零次或更多次之間的組
      • :匹配字符:字面上
      • [0-9]匹配0和9次或多次之間的單個字符
      /?匹配字符 /字面零或一次
    8. >捕獲組([a-za-z0-9 -._??,'/\&%$#=〜]*)*):
    9. [a-za-z0-9 -._? ? ,'/\&%$#=〜]*匹配零和無限時間在a-z,a-z,a-z,0-9的單個字符之間: - ._? ,'/&%$#=〜。
      匹配HTML TAG
    設想:

    開始標籤必須以用實際的例子揭開正面的神秘面紗>結尾
      結束標籤必須以一個或多個字符開始,然後以>
    • 結尾。
    • 我們必須匹配標籤元素中的內容
    • 圖案: (。*?)1> 匹配起始標籤和內部內容,它非常簡單地使用和(。*?),但是在上面的模式中,我添加了一個有用的內容:對捕獲組的引用。 每個由括號()定義的捕獲組都可以使用其位置號,(第一個)(第二)(第三),這將允許進一​​步操作。 以上表達可以解釋為:
    • 以開始
    捕獲標籤名稱
    • 之後是一個或多個炭
    • >
    • 捕獲標籤內的內容
    • 名稱必須在>
    • 之前捕獲名稱
    • 表達式中只有兩個捕獲組,標籤名稱和內容將返回一個非常清晰的匹配,即帶有相關內容的標籤名稱列表。 讓我們更深入地解釋副本:
    捕獲組([w])匹配任何單詞字符a-za-z0-9_一次或多次
    1. 。 *匹配零或更多次之間的任何字符(Newline除外)
    2. >匹配字符>字面上的
    3. 捕獲組(。
    4. /匹配字符 /字面
    5. 1匹配與第一個捕獲組相匹配的相同文本:([w])>
    6. >匹配字符>字面上
    7. 匹配重複的單詞
    8. 設想:
    9. 單詞是空間分開的

    我們必須匹配每個重複 - 非連續性

    圖案: b(w)b(?=。*1) 這種正則表達似乎具有挑戰性,但使用了先前顯示的一些概念。 該模式引入了單詞邊界的概念。 單詞邊界B主要檢查位置。當單詞字符(即abcde)之後是非單詞字符(即: - 〜,!)時,它與之匹配。 在下面,您可以找到單詞邊界的一些示例用途,以使其更清晰: - 鑑於短語正則表達式很棒 - 模式的準匹配是 - 模式w {3} b可以與單詞的最後三個字母匹配:lar,ion,是,ome 以上表達可以解釋為:
    • 匹配每個單詞字符,後跟一個非字角色(在我們的情況空間中)
    • 檢查是否已經存在匹配的單詞
    • 在下面,您將找到每個子模式的解釋:
      b字邊界
    1. 捕獲組([w])匹配任何字字符a-za-z0-9_
    2. >
    3. b字邊界
    4. (?=。*1)正lookahead斷言以下內容可以匹配:
      • 1匹配與首先捕獲組相同的文本
      如果我們返回所有匹配,而不是僅返回第一個匹配項,則表達式將更有意義。有關更多信息,請參見php函數preg_match_all。
    5. 最終想法
    正則表達式是雙刃劍。添加的複雜性越多,解決問題就越困難。這就是為什麼有時很難找到可以匹配所有情況的正則表達式的原因,最好使用幾個較小的正則表達式。 擁有一個良好的問題可能會非常有幫助,並且可以讓您開始思考角色範圍,約束,斷言,重複,可選值等。對組捕獲的更多關注將使匹配對進一步處理有用。隨意改善示例中的表情,讓我們知道您的工作方式!

    有用的資源

    在下面,您可以找到更多信息和資源,以幫助您的正則技能發展。 如果您發現未列出的有用的內容,請隨時在文章中添加評論。

    lea verou - /reg(exp){2}LAIND/:神秘面紗的正則表達式 https://www.youtube.com/watch?v=eklues9rvak

    > PHP庫

    >名稱 描述 Regexpbuilder 使用人類可讀的方法創建正則 Noonoofluentregex 使用流利的設定器和以上類似的英語術語來構建正則表達式 Hoaregex 提供分析正則和生成字符串的工具 正則反向 給定正則表達式將生成一個字符串

    >網站

    url 描述 Regex101.com PCRE在線正則測試儀 regextester.com PCRE在線正則測試儀 rexv.org PCRE在線正則測試儀 debuggex.com 支持PCRE,並提供非常有用的視覺正則辯論式調試器 Regexper.com JavaScript樣式的正則表達式,但可用於調試 phpliveregex.com Preg功能的在線測試儀 regxlib.com 準備使用的正則表達式數據庫 常規表達 正則教程,書籍評論,示例

    書籍

    >標題 描述 作者 >編輯 掌握正則表達式 必須有正則書 杰弗裡·弗里德爾(Jeffrey Friedl) O’Reilly 正則表達式袖珍參考 Perl,Ruby,Php,Python,C,Java和.net的正則表達式 托尼·喬布恩 O’Reilly

    經常詢問的問題(常見問題解答)有關正則表達式(REGEX)

    >正則表達式(REGEX)的哪些實際應用?它們通常在數據驗證中使用,以確保用戶輸入匹配特定格式,例如電子郵件地址或電話號碼。它們也可以用於網絡刮擦中,以從網頁中提取特定的信息。此外,REGEX可以用於文本處理中的任務,例如查找和替換特定的文本字符串,將字符串分配到一個子字符串中等等。 ?

    創建複雜的正則表達式涉及理解和組合各種正則表達式組件。這些包括文字,角色類別,量詞和化角。通過以不同的方式組合這些組件,您可以創建符合各種圖案的正則表達式。例如,您可以創建一個與電子郵件地址,電話號碼或URL匹配的正則表達式。

    >

    使用正則表達式時,有什麼常見錯誤需要避免哪些錯誤? *),這可能導致意外的結果。另一個常見的錯誤是當要從字面上解釋特殊角色時,沒有正確地逃脫特殊字符。此外,重要的是要記住,默認情況下,正則表達式對大小寫敏感,因此,如果您想忽略案例,則需要使用適當的標誌。

    >

    >我如何測試我的正則表達式(REGEX)? >

    >有幾種可用的在線工具可讓您測試正則表達式。這些工具通常允許您輸入正則表達式和測試字符串,然後突出顯示與正則表達式匹配的測試字符串的各個部分。這可能是調試正則表達式並確保它們按預期工作的好方法。

    可以在所有編程語言中使用正則表達式(REGEX)嗎?表達某種形式。但是,在語言之間,所支持的特定語法和功能可能會有所不同。例如,JavaScript,Python和Ruby都支持正則表達式,但它們每個都有自己的獨特語法和功能。

    >

    >使用正則表達式(REGEX)有什麼含義?雖然正則表達式可能非常強大,但如果不正確使用,它們也可能是資源密集的。複雜的正則表達式可能需要很長時間才能執行,尤其是在大量文本上。因此,必須明智地使用正則表達式並儘可能地優化它們。

    >如何優化我的正則表達式(REGEX)?

    >有幾種優化正則表達式的策略。其中包括避免使用不必要的量化符,當您不需要匹配的文本時使用非捕捉組,以及在可能的情況下使用字符類而不是交替。此外,某些正則表達引擎提供了優化功能,例如懶量化量,可以提高性能。

    >

    有哪些資源可以更多地了解正則表達式(REGEX)?可用於了解有關正則表達式的更多信息。其中包括在線教程,書籍和互動學習平台。此外,許多編程語言都有有關其正則表達語法和功能的大量文檔。

    >可以使用正則表達式(REGEX)來解析HTML或XML?

    >

    >在技術上可以使用正則表達式時要解析HTML或XML,通常不建議使用。這是因為HTML和XML具有嵌套的結構,該結構可能難以準確地捕獲,以正則表達式。相反,通常最好使用專用的HTML或XML解析器。

    >正則表達式(REGEX)有哪些替代方法?根據手頭的任務,您最好使用其他方法。例如,對於簡單的字符串操縱任務,您可以使用內置的字符串方法而不是正則表達式。對於解析HTML或XML,通常會使用專用解析器。對於復雜的文本處理任務,您可能需要考慮使用自然語言處理庫。 >

    以上是用實際的例子揭開正面的神秘面紗的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板