Tersbölü

Tersbölü karakterinin çeşitli kullanımları vardır. Tersbölünün ilk kullanım çeşidinde, bir harfin veya bir rakamın soluna konmuşsa karakterin özel anlamını kaldırır; karakter sınıflarının içinde ve dışında bir önceleme karakteri olarak iş görür.

Örneğin, şablonunuzun "*" karakteri ile eşleşmesini isterseniz, şablonu "\*" biçiminde yazmalısınız. Tersbölü karakterinin öncelediği karakter bir düzenli ifade işleci olsun ya da olmasın yorumu değişmeyecek, daima öncelediği karakter kendisiyle eşleşecektir. Sonuç olarak, önceleme işleci harf veya rakam olmayan karakterlerle de güvenle kullanılabilmektedir. Özellikle, bir tersbölü karakteri ile eşleşme sağlamak için "\\" yazmalısınız.

Bilginize:

Tek ve çift tırnaklı PHP dizgeleri içinde tersbölü karakteri özel olarak ele alınır. Bir \ ile eşleşen \\ düzenli ifadesi, PHP kodu içinde "\\\\" veya '\\\\' olarak belirtilmelidir.

Bir şablon PCRE_EXTENDED seçeneği ile derlenmişse kalıp içindeki (bir karakter sınıfının dışında kalan) boşluk karakterleri ve bir karakter sınıfının dışındaki bir "#" karakteri ile sonraki satırsonu karakteri arasındaki karakterler yok sayılır. Bir boşluk veya "#" karakterini şablonun parçası haline getirmek için, karakter tersbölü ile öncelenir.

Tersbölü karakterinin ikinci kullanımı, basılamayan karakterleri şablon içinde görünür kılmak içindir. İkil sıfırın şablonu sonlandırması dışında basılamayan karakterlerin görünümü ile ilgili bir kısıtlama yoktur. Fakat, bir şablon, bir metni düzenleyerek hazırlanıyorsa aşağıdaki önceleme dizilimlerini kullanmak, ifade ettikleri ikil karakterleri kullanmaktan daha kolaydır:

\a
sesli uyarı, yani BEL karakteri (onaltılık 07)
\cx
"CTRL-x"; buradaki x yerine herhangi bir karakter konabilir
\e
kaçış karakteri (onaltılık 1B)
\f
sayfa ileri (onaltılık 0C)
\n
satırsonu (onaltılık 0A)
\p{xx}
xx özellikli bir karakter, daha fazla bilgi için bkz. unicode özellikleri.
\P{xx}
xx özelliksiz bir karakter, daha fazla bilgi için bkz. unicode özellikleri.
\r
satırbaşı (onaltılık 0D)
\t
sekme (onaltılık 09)
\xhh
onaltılık kodu hh olan karakter, daha fazla bilgi için bkz. unicode özellikleri.
\ddd
sekizlik kodu ddd olan karakter veya bir geriye gönderim

"\cx" diziliminin en hassas etkisi şöyledir: "x" bir küçük harf ise büyük harfe dönüştürülür ve karakterin 6. biti (onaltılık 40) evrilir. Böylece, "\cz" dizilimi onaltılık 1A haline gelirken "\c{" onaltılık 3B ve "\c;" onaltılık 7B haline gelir.

"\x" dizilimden sonra en fazla iki onaltılık rakam okunur (harfler büyük veya küçük olabilir). UTF-8 kipinde, "\x{...}" gösterimine izin verilir; kaşlı ayraçların arasına yazılan onaltılık sayı UTF-8 karakterin kodu olarak yorumlanır. Özgün onaltılık önceleme dizilimi \xhh, eğer karakterin kodu 127'den büyükse iki baytlık bir UTF-8 karakteri ile eşleşecektir.

"\0" dizilimden sonra en fazla iki sekizlik rakam okunur. Her iki durumda da, iki rakamdan azı varsa olanlar kullanılır. Böylece, "\0\x\07" dizilimi iki ikil sıfırdan sonra bir BEL karakteri olarak yorumlanır. Eğer sekizlik gösterimin hemen ardından sekizlik rakam olarak yorumlanabilecek bir karakter geliyorsa ilk sıfırdan sonra mutlaka iki sekizlik rakam kullanın.

Tersbölünün hemen ardından 0 haricinde bir rakam gelmesi durumunda durum biraz karışır. Bir karakter sınıfının dışında, PCRE o rakamı ve diğer rakamları bir onluk sayı olarak okur. Eğer sayı 10'dan küçükse veya evvelce belirtilmiş yakalayan alt şablonlar varsa dizilimin tamamı bir geriye gönderim olarak ele alınır. İkinci durumun nasıl çalıştığı aşağıda parantezli alt şablonların açıklamasında anlatılmıştır.

Bir karakter sınıfının içinde veya evvelinde yakalayan alt şablonlar bulunmayan 9'dan büyük bir onluk sayı varlığında PCRE tersbölüden sonra en fazla üç sekizlik rakam okur ve değerin en önemsiz 8 bitinden tek bir bayt üretir. Daha sonraki rakamlar karakterlerin kendileri olarak ele alınır. Örnekler:

\040
Boşluk karakterini ifade etmenin bir başka yolu.
\40
40'tan az yakalayan alt şablon varlığında bu da aynısı.
\7
Daima geriye gönderim olarak yorumlanır.
\11
Duruma göre, bir geriye gönderim olabileceği gibi sekme karakteri olarak da yorumlanabilir.
\011
Daima bir sekme karakteridir
\0113
Sekme karakterinden sonra "3" var.
\113
Sekizlik kodu 113 olan karakter (99'dan fazla geriye gönderim olamayacağı için).
\377
Tamamı 1 bitten oluşan bir bayt.
\81
Duruma göre, bir geriye gönderim olabileceği gibi ikil sıfırın ardından gelen "8" ve "1" karakterleri de olabilir.

100'den büyük sekizlik değerlerin başına sıfır konmamalıdır, çünkü üç sekizlik rakamdan fazlası sekizlik sayının rakamları olarak ele alınmamaktadır.

Tek bir bayt değerini tanımlayan tüm dizilimler karakter sınıflarının içinde de dışında da kullanılabilir. Ek olarak, bir karakter sınıfının içinde, "\b" dizilimi bir tersbölü karakteri (onaltılık 08) olarak yorumlanır. Karakter sınıfının dışında ise anlamı farklıdır (aşağıya bakınız).

Tersbölünün üçüncü kullanımı soysal karakter türlerini belirtmek içindir:

\d
Herhangi bir onluk rakam
\D
Bir onluk rakam olmayan herhangi bir karakter
\h
Herhangi bir yatay boşluk karakteri (PHP 5.2.4'ten beri)
\H
Bir yatay boşluk karakteri olmayan herhangi bir karakter (PHP 5.2.4'ten beri)
\s
Herhangi bir boşluk karakteri
\S
Bir boşluk karakteri olmayan herhangi bir karakter
\v
Herhangi bir düşey boşluk karakteri (PHP 5.2.4'ten beri)
\V
Bir düşey boşluk karakteri olmayan herhangi bir karakter (PHP 5.2.4'ten beri)
\w
Herhangi bir "sözcük" karakteri
\W
Bir "sözcük" karakteri olmayan herhangi bir karakter

Her önceleme dizilimi çifti karakter kümesinin tamamını iki ayrı küme haline getirir. Belirtilen her karakter sadece ve sadece bir çift ile eşleşir.

Bir "sözcük" karakteri herhangi bir harf, rakam veya alt çizgi karakteri olabilir, yani, bir Perl sözcüğünün parçası olabilen her karakter bir "sözcük" karakteri olabilir. Harflerin ve rakamların tanımı PCRE'nin karakter tablosu tarafından denetlenir ve eşleştirme yerele özgü yapılıyorsa bu tanım değişebilir. Örneğin "tr" yerelindeki 128'den büyük karakter koduna sahip "çğıöşü" gibi karakterler \w ile eşleşir.

Karakter türündeki bu dizilimler karakter sınıflarının içinde veya dışında bulunabilir. Her biri uygun türdeki bir karakterle eşleşir. Eğer karakter eşleştirmesinde eşleşmeye konu dizgenin sonuna gelinmişse hiçbir karakter eşleşmeyeceğinden işlem başarısız olacaktır.

Tersbölünün dördüncü kullanımı bazı basit tezleri belirtmek içindir. Bir tez, eşleşmeye konu dizgenin hiçbir karakterini harcamaksızın belli bir noktada yerine getirilmesi gereken bir koşul belirtir. Daha karmaşık tezler için alt şablonların kullanımı aşağıda açıklanmıştır. Tez işleçleri şunlardır:

\b
Sözcük sınırlarıyla eşleşme işleci
\B
Sözcük içi eşleşme işleci
\A
Eşleşmeye konu dizgenin başlangıcı ile eşleşme işleci (çok satırlı kipten bağımsız)
\Z
Eşleşmeye konu dizgedeki satırsonu karakterinin öncesiyle eşleşme işleci (çok satırlı kipten bağımsız)
\z
Eşleşmeye konu dizgenin sonu ile eşleşme işleci (çok satırlı kipten bağımsız)
\G
eşleşmeye konu dizgede eşleşme başlangıcını belirtme işleci

Bu tez işleçleri "\b" hariç karakter sınıfları içinde görünmezler. "\b" işleci karakter sınıfları içinde özel bir anlama sahiptir ve tersbölü karaterini simgeler.

Eşleşmeye konu dizge içinde geçerli karakterin \w işleci ile ve önceki karakterin \W işleci ile eşleştiği nokta sözcük sınırının başlangıcını; geçerli karakterin \W işleci ile ve önceki karakterin \w işleci ile eşleştiği nokta ise sözcük sınırının bitişini belirler.

\A, \Z ve \z tez işleçleri, seçeneklerle belirlenen şekilde dizgenin en başı ve dizgenin en sonu ile eşleşen geleneksel şapka ve dolar imli işleçlerden (aşağıda açıklanmıştır) farklı olup PCRE_MULTILINE veya PCRE_DOLLAR_ENDONLY seçeneğinden etkilenmezler. \Z ile \z arasındaki fark \Z işlecinin dizgenin son karakteri olan satırsonu karakterinin öncesiyle eşleşmesi, \z işlecinin ise sadece dizge sonu ile eşleşmesidir.

\G savı, sadece, geçerli eşleşme konumu eşleşmenin başlangıç noktasında (preg_match() işlevinin başlangıç değiştirgesi ile belirtilen noktada) olduğu takdirde doğru olacaktır. başlangıç sıfırdan farklı olduğu durumda \G işleci \A işlecinden farklıdır. PHP'nin 4.3.3 sürümünden beri kullanılabilmektedir.

PHP 4.3.3'ten beri, \Q ve \E işleçleri şablon içindeki düzenli ifade işleçlerini geçersiz kılmak için kullanılabilmektedir. Örneğin, \w+\Q.$.\E$ düzenli ifadesi dizge sonuna demirlenmiş .$. karakterleriyle ve bunların öncesindeki bir veya daha fazla sayıda sözcük karakteriyle eşleşecektir.

\K işleci PHP'nin 5.2.4 sürümünden beri eşleşme başlangıcını sıfırlamak için kullanılabilmektedir. Örneğin, foo\Kbar şablonu, "foobar" ile eşleşir, fakat "bar" ile eşleştiğini raporlar. \K işlecinin kullanımı zaten eşleştirilmiş alt dizge ile etkileşmez. Örneğin, (foo)\Kbar şablonu "foobar" ile eşleşirken eşleşen ilk alt dizge "foo" olacaktır.