CakeFest 2024: The Official CakePHP Conference

Ayırıcılar

PCRE işlevlerini kullanırken şablonların ayırıcılar arasına alınması gerekir. Ayırıcılar tersbölü imi ve boşluk karakterleri hariç herhangi bir abecesayısal karakter olabilir. Geçerli bir ayırıcıdan önceki baştaki boşluklar sessizce yok sayılır.

Sıkça kullanılan ayırıcılar şunlardır: Bölü çizgisi (/), diyez imi (#) yaklaşık imi (~). Aşağıda, şablonlarda ayırıcı kullanımı ile örneklere yer verilmiştir.

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]%

Açma ve kapama parantezlerinin sırasıyla başlangıç ve bitiş sınırlayıcısı olduğu köşeli parantez tarzı sınırlayıcıları da kullanmak mümkündür. (), {}, [] ve <> çiftlerinin tümü, geçerli köşeli ayraç tarzı sınırlayıcı çiftleridir.

(this [is] a (pattern))
{this [is] a (pattern)}
[this [is] a (pattern)]
<this [is] a (pattern)>
Köşeli ayraç stili sınırlayıcılarının, kalıp içinde meta karakterler olarak kullanıldıklarında öncelenmesi gerekmez, ancak diğer sınırlayıcılarda olduğu gibi, değişmez karakterler olarak kullanıldıklarında bunların da öncelenmesi gerekir.

Sınırlayıcının kalıp içinde eşleştirilmesi gerekiyorsa, tersbölü çizgisi kullanılarak öncelenmesi gerekir. Sınırlayıcı sık sık kalıbın içinde görünüyorsa, okunabilirliği artırmak için başka bir sınırlayıcı seçmek daha iyidir.

/http:\/\//
#http://#
preg_quote() işlevi, bir bir kalıba yerleştirmek için bir dizeyi öncelemekte kullanılabilirve isteğe bağlı ikinci bağımsız değişkeni, öncelenecek sınırlayıcıyı belirtmek için kullanılabilir.

Şablonu sonalndıran ayırıcının ardına bir şablon değiştircisi eklemek de mümkündür. Aşağıda, harf büyüklüğüne duyarsız eşleşmeyle ilgili bir örnek vardır:

#[a-z]#i

add a note

User Contributed Notes 3 notes

up
36
Pedro Gimeno
9 years ago
Note that bracket style opening and closing delimiters aren't a 100% problem-free solution, as they need to be escaped when they aren't in matching pairs within the expression. That mismatch can happen when they appear inside character classes [...], as most meta-characters lose their special meaning. Consider these examples:

<?php
preg_match
('{[{]}', ''); // Warning: preg_match(): No ending matching delimiter '}'
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'
preg_match('{[}{]}', ''); // Warning: preg_match(): Unknown modifier ']'
?>

Escaping them solves it:

<?php
preg_match
('{[\{]}', ''); // OK
preg_match('{[}]}', ''); // OK
preg_match('{[\}\{]}', ''); // OK
?>
up
12
Munin
8 years ago
preg_match('{[}]}', ''); // Warning: preg_match(): Unknown modifier ']'

preg_match('{[\}]}', ''); // OK
up
4
Revo
5 years ago
Note that angle brackets `<>` shouldn't be used as delimiters whenever you will have to invoke advanced clusters like atomic groups or lookbehinds because their including angle bracket doesn't come in pair and escaping doesn't help either.
To Top