2013-01-02 14 views
1

當我讀到PCRE Pattern Modifiers時,我注意到每個修飾符都有一個我熟悉使用的字符串文字和一個常數,我認爲這是一個明確的選擇。PCRE模式修飾符常量,它們的作用域是否可見?

然而,參照這些常量時,這樣說

echo PCRE_CASELESS === "i";

我得到這個錯誤

PHP Notice: Use of undefined constant PCRE_CASELESS - assumed 'PCRE_CASELESS'

閱讀手冊仔細,我注意到它說

The names in parentheses refer to internal PCRE names for these modifiers

內部是什麼?文件列出它們的事實使我認爲它們在全球範圍內以某種方式可用。

+1

常數「在PHP手冊中應該列出相應的章節,即[* PCRE *]的預定義常量*(http://php.net/pcre.constants)。如果他們沒有列出,他們可能不存在。最後,它們應該包含在'get_defined_constants'的返回值中。 – Gumbo

回答

1

內部的pcre庫。他們沒有暴露於php userland-code。它們出現在手冊中僅用於那些例如知道庫本身的常量或其他語言實現的人的信息。所以一個人看到「PCRE_CASELESS」,並知道如果沒有再讀全文,會發生什麼。

+0

奇怪的是,我在查詢你的正則表達式庫https://github.com/CrunchPHP/RegularExpression之前,我問了這個問題,並注意到你重新定義了文字作爲自定義常量。現在我只能假設這是爲了實際而不是簡單的文體原因。 –

2

該文檔指的是底層PCRE庫內部使用的名稱,該名稱不能從PHP用戶空間直接訪問。文件中的名稱只是爲了方便。

您指定修飾符作爲實際正則表達式的一部分 - 例如,如果你想使用無殼改性劑(我),你可以使用/regex/i

preg_match('/pattern/i', ...); 

http://php.net/manual/en/regexp.reference.delimiters.php

+0

感謝您的回答,雖然我的問題是面向使用修飾符作爲常量而不是字符串文字,我感謝您的完整性。 –