PHP Velho Oeste 2024

POSIX regex'ten farklılıklar

PHP 5.3.0'dan itibaren POSIX Regex eklentisinin kullanımı önerilmemektedir.POSIX regex ile PCRE regex arasında bazı farklar vardır. Bu sayada, PCRE'ye geçerken size gerekli olacak en belirgin farklar listelenmiştir.

  1. PCRE işlevleri şablonların ayırıcılar arasına alınmasını gerektirir.
  2. POSIX'in tersine, PCRE eklentisi harf büyüklüğüne duyarsız eşleşmeye adanmış işlevlere sahip değildir. Bunun yerine /i şablon değiştiricisi. kullanılır. Eşleşme stratejisini değiştirmek için kullanılabilecek başka değiştiriciler de vardır.
  3. POSIX işlevleri en soldaki en uzun eşleşmeyi bulurken PCRE ilk geçerli eşleşmede durur. Eğer dizgenin tamamı eşleşmiyorsa bir fark ortaya çıkmaz ama eşleşme durumunda eşleşme hızı ve sonuçlar bakımından kayda değer farklar söz konusudur. Bu farkları görebilmek için Jeffrey Friedl'ın "Mastering Regular Expressions" adlı eserinden alımış örneğe bakalım. oneselfsufficient dizgesinde one(self)? (selfsufficient)? şablonunun PCRE ile kullanırsak eşleşme sonucu oneself olacaktır. POSIX ile kullanıldığında ise, sonuç dizgenin tamamı, yani oneselfsufficient olacaktır. Her iki sonuç da özgün dizge ile eşleşmesine rağmen POSIX en uzun eşleşmeyi gerektirir.

İşlevlerdeki farklar
POSIX PCRE
ereg_replace() preg_replace()
ereg() preg_match()
eregi_replace() preg_replace()
eregi() preg_match()
split() preg_split()
spliti() preg_split()
sql_regcase() No equivalent

add a note add a note

User Contributed Notes 2 notes

up
1
cdragon at dracoventions dot com
10 years ago
In regards to the previous comment that says "there are several other differences including different meaning for the symbols  ( [ different rules for which symbols need escaping", as far as I can tell from reading
http://www.tin.org/bin/man.cgi?section=7&topic=regex
there are absolutely no "other differences" except in what the man page calls "Obsolete  ("basic'')  regular  expressions".  However, PHP doesn't appear to use the obsolete form of expressions in its POSIX functions.

PCRE even supports all of the POSIX named character classes such as [:space:].
up
0
jasen at treshna dot com
12 years ago
there are several other differences

including different meaning for the symbols  ( [
different rules for which symbols need escaping (they can't be the same as both standard posix and extended posix)

you should read the full documentation for PCRE before chaging any posix regex to use pcre.
To Top