PHP 8.4.1 Released!

Dahili Seçeneklerin Ayarlanması

PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY, PCRE_EXTRA, PCRE_EXTENDED ve PCRE_DUPNAMES seçenekleri bir şablonun içinden Perl seçenek harfleri "(?" ve ")" arasında kullanılarak değiştirilebilir. Seçenek harfleri şunlardır:

Dahili seçenek harfleri
i PCRE_CASELESS için
m PCRE_MULTILINE için
s PCRE_DOTALL için
x PCRE_EXTENDED için
U PCRE_UNGREEDY için
X PCRE_EXTRA için (PHP 7.3.0 ve sonrasında artık desteklenmiyor.)
J PCRE_INFO_JCHANGED için

Örneğin, (?im) dizilimi harf büyüklüğüne duyarsız, çok satırlı eşleşmeyi etkin kılar. Seçenekleri etkisiz hale getirmek için bu harflerin önüne bir tire imi konabilir. Örneğin, (?im-sx) dizilimi, PCRE_CASELESS ve PCRE_MULTILINE seçeneklerini etkin, PCRE_DOTALL ve PCRE_EXTENDED seçeneklerini ise etkisiz kılar. Eğer bir harf tire iminin hem öncesinde hem de sonrasında görünüyorsa onunla ilgili seçenek tanımsız olur.

Üst seviyeden bir seçenek değişikliği varsa (yani değişiklik bir alt şablon içinde değilse), değişiklik şablonun kalanına uygulanacaktır. Bu bakımdan, /ab(?i)c/ şablonu sadece "abc" ve "abC" dizgeleri ile eşleşecektir.

Değişiklik bir alt şablonun içinde yapılırsa etkisi farklı olur. Bu davranış Perl 5.005'ten itibaren geçerlidir. Bir alt şablon içindeki seçenek değişiklikleri sadece alt şablonun kalanını etkileyecektir. Bu bakımdan (a(?i)b)c şablonu abc ve aBc dizgelerinden başka bir dizgeyle eşleşmez (PCRE_CASELESS seçeneğinin şablon genelinde kullanılmadığı varsayılıyor). Yani, bir şablonun farklı yerlerinde farklı seçenekler farklı ayarlarla kullanılabilir. Olasılıklardan birinde yapılmış bir seçenek değişikliği sonraki diğer olasılıklar için de geçerli olacaktır. Örneğin, (a(?i)b|c) şablonu "ab", "aB", "c" ve "C" dizgeleriyle eşleşecektir. Bunun sebebi, seçenek ayarlarının etkilerinin derleme sırasında gözönüne alınmasıdır. Yoksa çok tuhaf davranışlar ortaya çıkabilirdi.

Perl uyumlu seçeneklerde olduğu gibi, PCRE'ye özgü seçenekler olan PCRE_UNGREEDY ve PCRE_EXTRA seçenekleri de sırayla U ve X karakterleri ile kullanılarak değiştirilebilir. (?X) ayarı özel bir ayar olup, bir şablonda herhangi bir ek özelliğin etkin kılınmasından önce kullanılmayı gerektirir. Yapılacak en iyi şey en başa koymaktır.

add a note

User Contributed Notes 2 notes

up
3
mike at clove dot com
14 years ago
When using the (?i:foo) syntax, it appears that the group is not included in the 'matches' argument unless it is nested in an additional set of parenthesis, for example: ((?i:foo))
up
2
mati_ at zenbe dot com
15 years ago
There is also the possibility to enable Modifier only on a specific group, so that the Modifier doesn't stay valid until end or deactivation with "(?-<modifier>)".

The Syntax for that is "?<modifier>:" on the beginning of the group, i.e. (?i:foo) matches on FoO.
To Top