此網站上的更多內容 |
簡介 |
正規表示式快速開始 |
正規表示式教學 |
替換字串教學 |
應用程式和語言 |
正規表示式範例 |
正規表示式參考 |
替換字串參考 |
書籍評論 |
可列印 PDF |
關於此網站 |
RSS 饋送和部落格 |
錨點 \G 會在上次比對結束的位置進行比對。在第一次比對嘗試期間,\G 會在 字串的開頭 進行比對,就像 \A 一樣。
將 \G\w 套用到字串 test string 會比對到 t。再次套用會比對到 e。第 3 次嘗試會產生 s,而第 4 次嘗試會比對到字串中的第二個 t。第五次嘗試會失敗。在第五次嘗試期間,字串中唯一比對到 \G 的位置在第二個 t 之後。但該位置後面沒有字元,因此比對會失敗。
在某些 regex 風格或工具中,\G 會在比對嘗試的開頭比對,而不是在前一次比對的結尾。這是 Ruby 和 Just Great Software 應用程式 的情況。在 EditPad Pro 中,\G 會在游標位置比對。當找到比對時,EditPad Pro 會選取比對,並將游標移到比對的結尾。結果是,\G 只有在您沒有在兩次搜尋之間移動游標時,才會在上次比對結果的結尾比對。總而言之,這在文字編輯器的環境中非常有意義。
如果您的正規表示式可以找到 零長度比對,則前一次比對的結尾和比對嘗試的開頭之間的區別也很重要。大多數 regex 引擎會在零長度比對後 在字串中前進。在這種情況下,比對嘗試的開頭在字串中比前一次比對嘗試的結尾多一個字元。.NET、Java 和 Boost 會以這種方式前進,並在上次比對嘗試的結尾比對 \G。因此,當 .NET、Java 和 Boost 在零長度比對後前進時,\G 會無法比對。
在 Perl 中,上次比對結束的位置是一個「神奇」值,會針對每個字串變數分別記住。該位置與任何正規表示式無關。這表示您可以使用 \G 讓 regex 在另一個 regex 停止的位置繼續在主旨字串中進行。
如果比對嘗試失敗,\G 的儲存位置會重設為字串的開頭。若要避免這種情況,請指定延續修飾詞 /c。
所有這些對於讓多個正規表示式一起運作非常有用。例如,你可以用以下方式剖析 HTML 檔案
while ($string =~ m/</g) {
if ($string =~ m/\GB>/c) {
# Bold
} elsif ($string =~ m/\GI>/c) {
# Italics
} else {
# ...etc...
}
}
while 迴圈中的正規表示式會搜尋標籤的開啟方括號,而迴圈內的正規表示式會檢查我們找到的標籤。這樣一來,你可以按照檔案中出現的順序剖析檔案中的標籤,而不用寫一個單一的大正規表示式來比對你感興趣的所有標籤。
這種彈性在大部分其他程式語言中並不存在。例如,在 Java 中,\G 的位置會由 Matcher 物件記住。Matcher 與單一正規表示式和單一主旨字串嚴密關聯。不過,你可以新增一行程式碼,讓第二個 Matcher 的比對嘗試從第一個 Matcher 的比對結束處開始。然後 \G 會比對這個位置。
通常,\A 是 字串開頭錨點。但在 Tcl 中,錨點 \A 會比對比對嘗試的開頭,而不是字串的開頭。使用 GNU 風格 時,\<(反斜線反引號)會執行相同的動作。如果你只呼叫 Tcl 中的 regexp 或 GNU 函式庫中的 regexec() 一次,這不會造成任何差異。如果你在第一次比對後呼叫第二次比對,在字串的剩餘部分尋找另一個比對,這可能會造成差異。\A 或 \< 會比對第一次比對的結尾,而不是像字串開頭錨點通常會做的那樣無法比對。奇怪的是,在 Tcl 或 GNU 的函式庫中,插入符號都沒有這個問題。
| 快速開始 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |
| 簡介 | 目錄 | 特殊字元 | 非列印字元 | 正規表示式引擎內部 | 字元類別 | 字元類別減法 | 字元類別交集 | 簡寫字元類別 | 點 | 錨點 | 字詞邊界 | 交替 | 可選項目 | 重複 | 群組與擷取 | 反向參照 | 反向參照,第 2 部分 | 命名群組 | 相對反向參照 | 分支重設群組 | 自由間距與註解 | Unicode | 模式修改器 | 原子群組 | 獨佔量詞 | 前瞻與後顧 | 前瞻與後顧,第 2 部分 | 將文字保留在比對之外 | 條件式 | 平衡群組 | 遞迴 | 子常式 | 無限遞迴 | 遞迴與量詞 | 遞迴與擷取 | 遞迴與反向參照 | 遞迴與回溯 | POSIX 方括號表示式 | 零長度比對 | 繼續比對 |
頁面網址:https://regular-expressions.dev.org.tw/continue.html
頁面最後更新時間:2021 年 11 月 5 日
網站最後更新時間:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。