1 回答

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在模式驗證上更加嚴格,所以升級后,你現有的一些模式不能再編譯了。
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報