Düzenli ifade İşleçleri

Düzenli ifadelerin gücü, şablon içinde yinelemeler ve ikameler içerme yeteneğinden kaynaklanır. Bunlar şablon içinde düzenli ifade işleçleri adı verilen ve özel bir şekilde yorumlanan ancak doğrudan kendileriyle eşleşmeyen karakterlerle kodlanırlar.

İki ayrı işleç ailesi vardır: Köşeli ayraçların içindekiler ve dışındakiler. Köşeli ayraçların dışındaki işleçler şunlardır:

\
çeşitli kullanımları olan genel önceleme karakteri
^
konu başlangıcıyla eşleşme işleci (satır kipinde veya çok satırlı kipte)
$
konu sonuyla eşleşme işleci (satır kipinde veya çok satırlı kipte)
.
(öntanımlı olarak) satırsonu hariç herhangi bir karakterle eşleşme işleci
[
Karakter sınıfı tanımı başlatma işleci
]
Karakter sınıfı tanımı bitirme işleci
|
VEYA işleci
(
alt şablon başlatma işleci
)
alt şablon bitirme işleci
?
"(" işlecinin anlamını genişletir; 0 veya 1 kere eşleşir, ayrıca tamahkarlığa son verilir. (bkz. Yineleme)
*
0 veya daha fazlasıyla eşleşme işleci
+
1 veya daha fazlasıyla eşleşme işleci
{
Yineleme başlatma işleci
}
Yineleme bitirme işleci
Köşeli ayraçların içinde kalan kısım "karakter sınıfı" adını alır. Bir karakter sınıfı içinde özel anlamı olan işleçler şunlardır:
\
genel önceleme karakteri
^
sınıfın ilk karakteri olduğu takdirde sınıfla eşleşmeme işleci
-
karakter aralığı işleci
]
karakter sınıfı bitirme işleci
Aşağıdaki bölümlerde bu işleçler ayrı ayrı açıklanmıştır.

add a note add a note

User Contributed Notes 2 notes

up
1
Kurt Wei
1 year ago
disturbing usage of "any character" for multi-lines...

remark:
'.' (all characters) just does NOT include on single character the newline (\n) by default,
while \n is included in all other matching searches (e.g. \s).
Funny enough, the "carriage return" (\r) is included, when using '.'

You have to write "(.|\\n)" instead of a single dot, with disadvantages in using complex matching-results,

or simple use the "s" modificator to bring dot to accept the newline.

$subject="<tag>Hello\nWorld</tag>";

preg_match( '/<tag>[A-Za-z\\s]*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>[^<]*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>(.|\\n)*<\\/tag>/' , $subject ); //true
preg_match( '/<tag>.*<\\/tag>/s' , $subject ); //true
preg_match( '/<tag>.*<\\/tag>/' , $subject ); //ATTENTION! *false*
up
-17
Thomas
2 years ago
The meta character $ accepts a (one) newline character (\n).

(Take a moment to let this information sink in)

You might want to (r)trim() your input afterwards if you have a match because otherwise it (still) might not meet a length requirement or other strange stuff might happen when you store the input as-is.
To Top