首頁 後端開發 php教程 php-PCRE正規表示式後向引用的詳細介紹

php-PCRE正規表示式後向引用的詳細介紹

Mar 30, 2017 pm 03:03 PM
php

在一個字符類外面, 反斜線緊跟一個大於 0 (可能還有一位數)的數字就是一個到模式中之前出現的某個捕獲組的後向引用

如果緊跟反斜線的數字小於 10, 它總是一個後向引用, 並且如果在模式中沒有這麼多的捕獲組會引發一個錯誤。 換一種說法, 被引用的括號不能少於被引用的小於 10 的數量。 查看上面的”反斜線”部分查看具體的數字處理方式。

一個後向引用會直接匹配被引用捕獲組在目標字串中實際捕獲到的內容, 而不是匹配子組模式的內容。因此,模式(sens|respons)e and 1ibility將會匹配 ”sense and sensibility” 和 ”response and responsibility”, 而不會匹配 ”sense and responsibility”。 如果在後向引用時被強制進行了大小寫敏感匹配, 例如 ((?i)rah)s+1 匹配”rah rah”和”RAH RAH”,但是不會匹配”RAH rah”, 即使原始捕獲子組本身是不區分大小寫的。 譯註: 這裡其實要考慮的是後向引用期望得到的內容是和那個被引用的捕獲子組得到的內容是完全一致的(當然, 我們可以通過在後向引用之前設定內部選項使其不區分大小寫,或增加模式修飾符, 同樣可以達到不區分大小寫的目的,但是, 這種做法實際上是從外部對其行為進行了控制。引用相同的子組。 一個子組可能不會真正的用於特定的匹配,此時, 任何對這個子組的後向引用也都會失敗。 例如, 模式 (a|(bc))2 總是在符合 ”a” 開頭而不是 ”bc” 開頭的字串時失敗。 因為可能會有多達 99 個後向引用, 所有緊接反斜線後的數字都可能是一個潛在的後向引用計數。 如果模式在後向引用之後緊接著還是一個數值字符, 那麼必須使用一些分隔符用於終結後向引用語法。 如果 PCRE_EXTENDED 選項設定了, 可以使用空格來做。其他情況下可以使用一個空的

註解

如果一個後向引用出現在它所引用的子組內部, 它的匹配就會失敗。例如, (a1) 就不會得到任何符合。然而這種引用可以用於內部的子模式重複。例如,模式 (a|b1)+ 會符合任意數量的”a” 組成的字串以及”aba”, “ababba” 等等(譯註:因為子群內部有一個可選路徑,可選路徑中有一條路能夠完成匹配,在匹配完成後, 後向引用就能夠引用到內容了)。在每次子模式的迭代過程中, 後向引用匹配上一次迭代時這個子組匹配到的字串。為了做這種工作, 模式必須滿足這樣一個條件,模式在第一次迭代的時候, 必須能夠保證不需要匹配後向引用。 這種條件可以像上面的例子用可選路徑來實現,也可以透過使用最小值為 0 的

量詞

修飾後向引用的方式來完成。 在 PHP 5.2.2之後, g 轉義序列可用於子模式的絕對和相對引用。 這個轉義序列必須緊接一個無符號數字或一個負數, 可以選擇性的使用括號對數字進行包裹。 序列1, g1,g{1} 之間是同義詞關係。 這種用法可以消除使用反斜線緊跟數值來描述反向引用時候產生的歧義。 這種轉義序列有利於區分後向引用和八進制數字字符, 也使得後向引用後面緊跟一個原文匹配數字變的更明了,比如 g{2}1。

g 轉義序列緊接著一個負數代表一個相對的後向引用。例如: (foo)(bar)g{-1} 可以符合字串 ”foobarbar”,(foo)(bar)g{2} 可以符合 ”foobarfoo」。 這在長的模式中作為一個可選方案, 用來保持對先前特定子組的引用的子組序號的追蹤。

後向引用也支援使用子群組名稱的語法方式描述, 例如 (?P=name) 或 PHP 5.2.2 開始可以實用k 或 k’name’。 另外在 PHP 5.2.4 中加入了對k{name} 和 g{name} 的支援。

 以上就是php-PCRE正規表示式後向引用的詳細介紹的內容,更多相關內容請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles