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:
Ö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.
mati_ at zenbe dot com ¶14 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.
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))