簡體   English   中英

奇怪的不被接受的 PHP 正則表達式模式

[英]Strange Unaccepted PHP Regex Pattern

因此,在嘗試修復意外錯誤的過程中,我得出的結論是,在 php 中,以下內容在某種程度上是不可接受的:

$pattern = "/\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/";
$subject = "\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/";
preg_match($pattern, $subject, $result);

我不知道如何或為什么 - 我所知道的是,如果我有這條線,那么在這條線之前和之后的不同位置的各種單詞的各種調試回顯將不再回顯。 任何地方都沒有循環,所以我很困惑為什么這會導致問題。

無需轉義字符串中的斜線。 '\/''\\/'相同,即字符串\/

在正則表達式中,如果您使用斜杠終止表達式, \/會轉義斜杠。 您不需要那個,只需選擇另一個終止符,例如#

preg_match('#^/sc2/en/profile/693604/1/EGIdrA/ladder/$#',
           '/sc2/en/profile/693604/1/EGIdrA/ladder/', $result);

preg_match的一次調用不會停止程序的執行。 但是,可能會發出各種錯誤和警告 - 例如,您在正則表達式中缺少終止/會產生

PHP Warning:  preg_match(): No ending delimiter '/' found

檢查服務器的 php 設置(即error_reportinglog_errors )是否有警告和錯誤 output 配置。 在許多系統上,/var/ /var/log/apache*/error.log /apache*/error.log 包含所有 php 錯誤和警告。 請注意,設置display_errors可以修改 output 並使其成為無效的 XML 文檔或混淆高級 output 緩沖。

原因如下:

preg_match('/^\/$/', '\/'); // false
preg_match('/^\/$/', '/'); // true

您不應該在輸入字符串中轉義斜杠/ ,以模式轉義它們就足夠了

preg_match('/^\/sc2\/en\/profile\/693604\/1\/EGIdrA\/ladder\/$/',
       '/sc2/en/profile/693604/1/EGIdrA/ladder/', $result);

(或者像提到的 phihag 一樣,使用 ie # 來終止模式)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM