2010-04-22 15 views
3

我想問一下,這兩條線的含義或區別是什麼?Preg_match差異?

  • if(preg_match_all('/\#([א-תÀ-ÿ一-龥а-яa-z0-9\-_]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER)) {

  • if(preg_match_all('/\#([а-яa-z0-9\-_\x{4e00}-\x{9fa5}]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER)) {

  • 和什麼數3在這條線是什麼意思? (箭頭指向)

    if(preg_match_all('/\@([a-zA-Z0-9\-_\x{4e00}-\x{9fa5}]{->3,30})/u', $message, $matches, PREG_PATTERN_ORDER)) { 
    

    謝謝!

    回答

    3

    我來回答你的問題的第二部分:3一個min

    在正則表達式的{3,30}意味着quantifier30repetitions一個最大值。

    • a*意味着零個或多個a
    • a+指一種或多種a
    • a?意味着零個或一個a
    • a{1}指恰好一個一個相同 只是a
    • a{1,}是指一個或更像 a+
    • a{1,3}意味着一個最小和最大的

    你可以有任何複雜的正則表達式來代替a。示例:[a-zA-Z]{3,30}將意味着至少3和任何字母的最大30

    0

    您的第一個正則表達式包含第二個正則表達式不包含的希伯來語和重音拉丁字符(可能還有其他)。

    0

    第二個表達式使用Unicode syntax來匹配Unicode字符。

    \ X {FFFF}其中FFFF是1至4個十六進制數字
    Perl的語法來匹配特定Unicode代碼點。可以在角色類中使用。

    示例:
    \ x {E0}僅匹配編碼爲U + 00E0的編碼。
    \ X {A9}匹配©

    因此它試圖距離U每Unicode字符匹配+ 4E00到U + 9fa5(從),而最後一個是無效的Unicode字符。


    第一個表達式也嘗試匹配這些字符(一-龥),但他們沒有在Unicode的語法(這是否不反對一個問題,我不知道)表示。另外(如已經提到的)第一個表達式匹配更多字符,即א-תÀ-ÿ


    第二個問題was already very well answered由unicornaddict。