色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

PHP擴展之文本處理(二)——PCRE正則表達式語法12——一次性子組

瀏覽:3日期:2022-09-16 08:32:04

對于同時有最大值和最小值量詞限制的重復項, 在匹配失敗后, 緊接著會以另外一個重復次數重新評估是否能使模式匹配。 當模式的作者明確知道執行上沒有問題時, 通過改變匹配的行為或者使其更早的匹配失敗以阻止這種行為是很有用的。

考慮一個例子,模式 d+foo 應用到目標行?123456bar?時:

在匹配了 6 個數字后匹配 ”foo” 時失敗,通常的行為時匹配器嘗試使 d+ 只匹配 5 個數字, 只匹配 4 個數字,在最終失敗之前依次進行嘗試。 一次性子組提供了一種特殊的意義, 當模式的一部分得到匹配后,不再對其進行重新評估, 因此匹配器在第一次匹配 ”foo” 失敗后就能立刻失敗。語法符號是另外一種特殊的括號, 以 (?> 開始,比如(?>d+)bar。

這種括號對模式的一部分提供了”鎖定”,當它包含一個匹配之后, 會阻止未來模式失敗后對它內部的后向回溯。后向回溯在這里失效, 其他工作照常進行。

換一種說法,如果在目標字符串中當前匹配點是錨點, 這種類型的子組匹配的字符串等同于一個獨立的模式匹配。

一次性子組不是捕獲子組。如上面的例子,簡單而言, 就是盡其所能吃掉盡可能多的匹配字符。因此, 盡管 d+ 和 d+? 都會調整要匹配的數字的個數以便模式的其他部分匹配, (?>d+) 卻僅能匹配整個數字序列。

這個(語法)結構可以包含任意復雜度的字符, 也可以嵌套。

一次性子組可以和后瞻斷言結合使用來指定在目標字符串末尾的有效匹配。 考慮當一個簡單的模式比如abcd$應用到一個不匹配的長字符串上。 由于匹配時從左到右處理的, PCRE會從目標中查找每一個 ”a” 然后查看是否緊接著會匹配模式的剩余部分。 如果模式是^.*abcd$, 那么初始的 .* 將首先匹配整個字符串,但是當它失敗后(因為緊接著不是 ”a”), 它會回溯所有的匹配,依次吐出最后 1 個字符,倒數第 2 個字符等等。 從右向左查找整個字符串中的 ”a”, 因此,我們不能很好的退出。然而, 如果模式寫作?^(?>.*)(?<=abcd)?那么它就不會回溯 .* 這一部分, 它僅僅用于匹配整個字符串。后瞻斷言對字符串末尾的后四個字符做了一個測試。 如果它失敗,匹配立即失敗。對于長字符串, 這個模式將會帶來顯著的處理時間上的性能提升。

當一個模式中包含一個子組自己可以無限重復并且內部有無限重復元素時, 使用一次性子組是避免一些失敗匹配消耗大量時間的唯一途徑。 模式?(D+|<d+>)*[!?]?匹配一個不限制數目的非數字字符或由 <> 閉合的數字字符緊跟著 ! 或 ?。 當它匹配的時候,運行時快速的。然而, 如果它應用到 ”aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa” 上將會在報告錯誤之前消耗很多時間。 這是因為字符串可以用于兩種重復規則,并且需要為兩種重復規則都分配進行嘗試。 (示例的結尾使用 [!?] 而不是單個的字符, 是因為 PCRE 和 perl 都會對模式最后是一個單獨字符時的快速報錯有優化。 它們會記錄最后需要匹配的單個字符,當它們沒有出現在字符串中時快速報錯。) 如果模式修改為?((?>D+)|<d+>)*[!?]?就會快速得到報錯。(譯注: 對于這里給出的模式,當目標字符串更長的時候,消耗時間會迅速增加,慎用。)

標簽: PHP
相關文章:
主站蜘蛛池模板: 一级黄色毛片免费看 | 欧美成人免费午夜全 | 在线免费观看欧美 | 亚洲在线久久 | 国产99视频精品草莓免视看 | 精品国产美女福到在线不卡f | 久久综合中文字幕一区二区 | 99热久久国产精品一区 | 久久精品视频6 | 日韩中文字幕在线观看视频 | 国产精品国产亚洲精品看不卡 | 一级做a爰片性色毛片小说 一级做a爰片性色毛片中国 | 最近韩国日本免费免费版 | 国产伦精品一区二区三区免费 | 自拍视频网 | 亚洲成人在线视频播放 | 欧美做暖小视频xo免费 | 日韩在线三级视频 | 国产成人精品三级91在线影院 | 欧美日韩色 | 国产成年 | 欧美f | 日本一级特黄啪啪片 | 久色视频 | 日韩美女视频在线观看 | 视频一区视频二区在线观看 | 欧美日本免费观看αv片 | 91精品全国免费观看 | 国产日产亚洲系列首页 | 男人在线网址 | 久久国产影视免费精品 | 一级a毛片 | 黄色作爱 | 国产成人亚洲精品一区二区在线看 | 日韩一区二区三区不卡视频 | 视频三区精品中文字幕 | 欧美日韩一区在线观看 | 成人看片黄a在线看 | 亚洲羞羞裸色私人影院 | 亚州三级 | 免费高清在线爱做视频 |