亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 REGEX 刪除 CSS 注釋時出錯

通過 REGEX 刪除 CSS 注釋時出錯

PHP
慕哥9229398 2022-01-02 19:45:15
事實證明,這兩個序列(以前有效)"`([\n\A;]+)\/\*(.+?)\*\/`ism" => "$1",     // error"`([\n\A;\s]+)//(.+?)[\n\r]`ism" =>"$1\n",  // error現在在 PHP 7.3 中拋出錯誤警告:preg_replace():編譯失?。鹤址惼屏?4 中的轉義序列無效上下文:考慮這個 snipit,它從字符串中刪除 CSS 注釋$buffer = ".selector {color:#fff; } /* some comment to remove*/";$regex = array("`^([\t\s]+)`ism"=>'',"`^\/\*(.+?)\*\/`ism"=>"","`([\n\A;]+)\/\*(.+?)\*\/`ism"=>"$1",     // 7.3 error"`([\n\A;\s]+)//(.+?)[\n\r]`ism"=>"$1\n", // 7.3 error"`(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+`ism"=>"\n");$buffer = preg_replace(array_keys($regex),$regex,$buffer);//returns cleaned up $buffer value with pure css and no comments參考:https : //stackoverflow.com/a/1581063/1293658Q1 -在這種情況下,正則表達式有什么問題嗎?這個線程似乎表明它只是一個錯位的反斜杠 https://github.com/thujohn/twitter/issues/250Q2 -這是 PHP 7.3 錯誤還是此代碼中的 REGEX 序列有問題?
查看完整描述

1 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

不要在字符類中使用零寬度斷言。

  • ^$\A\b\B\Z\z\G-作為錨點,(非)詞邊界- 在字符類中沒有意義,因為它們不匹配任何字符。該^\b在字符類平均不同的東西:^要么是如果打開之后使用的否定字符類的標記[或表示文字^。\b表示退格字符。

  • 你不能\R在那里使用(=any line break),也不能。

\A必須將字符類內部的兩個模式重寫為分組結構(...),并帶有交替運算符|

"`(\A|[\n;]+)/\*.+?\*/`s"=>"$1", 

"`(\A|[;\s]+)//.+\R`"=>"$1\n", 

我刪除了您不使用的冗余修飾符和捕獲組,并替換[\r\n]為\R. 該"`(\A|[\n;]+)/\*.+?\*/`s"=>"$1" 還可以重新寫在一個更有效的方式:


"`(\A|[\n;]+)/\*[^*]*\*+(?:[^/*][^*]*\*+)*/`"=>"$1"

請注意,在 PHP 7.3 中,acc. 到捆綁的PCRE庫表的升級歷史,正則表達式庫是PCRE 10.32。請參閱PCRE 到 PCRE2 遷移:


在 PHP 7.2 之前,PHP 使用舊版 PCRE 庫的 8.x 版本,從 PHP 7.3 開始,PHP 將使用 PCRE2。請注意,盡管 PCRE2 基于 PCRE (8.x) 并在很大程度上與 PCRE (8.x) 兼容,但它仍被認為是一個新庫。


累積 對于此資源,更新后的庫對正則表達式模式更加嚴格,并且現在將以前寬容地接受的用戶錯誤視為真正的錯誤:


默認情況下,修改器 S 現在處于啟用狀態。PCRE 做了一些額外的優化。

默認情況下禁用選項 X。它使 PCRE 比以前做更多的語法驗證。

使用 Unicode 10,而使用 Unicode 7。這意味著更多表情符號、更多字符和更多集合。Unicode 正則表達式可能會受到影響。

一些無效的模式可能會受到影響。

簡單來說,PCRE2在模式驗證上更加嚴格,所以升級后,你現有的一些模式不能再編譯了。


查看完整回答
反對 回復 2022-01-02
  • 1 回答
  • 0 關注
  • 152 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號