Regular Expression - Düzenli ?fadeler

DÜzenli ifadeler (regular expressions veya kIsaca RegExp) herhangi bir karakter diziliminin yapIsInI yani iÇerdi?i karakterlerin neler oldu?u ile bunlarIn dizili? sIrasI (konumlarI) ve biÇimlerinin Önceden tanImlanan belli bir biÇime uyumunun denetlenmesi/sInanmasI sIrasInda kullanIlan standart gÖsterim biÇimleri ya da denetim ?ablonlarIdIr. DÜzenli ifadelerin kullanIlmasI ile sa?lanan en Önemli kolaylIk karakter dizimlerinde bulunan karakterlerin Önceden bilinen belli bir desenine uygun olup olmadI?InI sInama/deneme yetene?inden gelmektedir

Giri?

ASP sayfalarInIn birÇo?unda kullanIcI ile etkile?im sa?lamak amacIyla formlar kullanIlmaktadIr. ?imdi bir Web sitesinde bulunan konuk defteri uygulamasInI ele alalIm. Konuk defteri uygulamasInda Web sitesini ziyaret eden ki?iye adI, adresi ve e-posta adresi gibi bir takIm sorular yÖneltilir. Ancak, kullanIcI sÖz konusu bilgileri do?ru girmekte midir? Örne?in, ziyaretÇi adInI girmesi gereken alanI bo? geÇebilir. Ya da, ad alanIna sadece rakamlardan olu?an bir sayIsal giri? yapabilir. Ya da tek bir harf girebilir. Benzer ?eyleri, e-posta adresi iÇin de tartI?abiliriz. Bilindi?i gibi, orakci@abc.com Örne?inde oldu?u gibi kullanIcI@alan_adI sÖzdizimi ile girilmesi gereken e-posta adres alanIna yanlI? bir giri? yapIlabilir. Örne?in, alana @ i?areti olmaksIzIn giri? yapIlabilir ki bu bir geÇersiz e-posta adresidir. E-posta adresinin alan adI kIsmInda ise en az bir nokta bulunmasI gerekirken, noktanIn kullanIcI adI bÖlgesinde bulunmasI veya alan adI sonunda kullanIlmasI yanlI? veya geÇersiz giri?lerdir. Benzer ?ekilde, alan adI bÖlÜmÜne sadece bir tek nokta girilirse veya normalde olanInIn aksine ikiden fazla nokta girilmi?se bunlar da geÇersiz giri?lere Örnektedir. SayIsal bilgi girilmesi gereken bir alana alfabetik bilgi giri?i yapIlmasI ise tÜrsel uyumsuzluk geÇersizli?ine yol aÇmaktadIr.
YukarIda anIlan sorunlarI a?mak Web uygulamasI geli?tirenlerin gerÇekten ba? a?rIsIdIr. ?Öyle ki, herbir Web formu alanIna girilen bilgilerin geÇerli olup olmadI?InI denetlemek iÇin yÜzlerce satIrdan ve/veya if Öbe?inden olu?an kod yazmak gereklidir. Ancak, ASP sayfalarInda bu sorun "dÜzenli ifade" (regular expression) kullanImI ile oldukÇa basit bir hale getirilmi?tir. Bu makalede, ASP sayfalarInda dÜzenli ifade kullanImIna giri? yapIlarak bazI basit Örneklerle aÇIklanmaktadIr.

DÜzenli ?fade Nedir?

DÜzenli ifadeler (regular expressions veya kIsaca RegExp) herhangi bir karakter diziliminin yapIsInI yani iÇerdi?i karakterlerin neler oldu?u ile bunlarIn dizili? sIrasI (konumlarI) ve biÇimlerinin Önceden tanImlanan belli bir biÇime uyumunun denetlenmesi/sInanmasI sIrasInda kullanIlan standart gÖsterim biÇimleri ya da denetim ?ablonlarIdIr. DÜzenli ifadelerin kullanIlmasI ile sa?lanan en Önemli kolaylIk karakter dizimlerinde bulunan karakterlerin Önceden bilinen belli bir desenine uygun olup olmadI?InI sInama/deneme yetene?inden gelmektedir. RegExp, ba?ta form verilerinin geÇerlilik/do?ruluk denetimlerinde (validation control) oldu?u kadar karakter dizilimlerine ba?vurulan di?er i?lemlerde de oldukÇa bÜyÜk yararlar sa?lamaktadIr. Örne?in, ondalIk kesirli herhangi bir sayInIn deseni "x.y" ?eklinde olup "x" kIsmInda (tam kIsIm) hiÇ rakam bulunmayaca?I gibi Çok sayIda rakam da yer alabilir. AynI ?ey noktanIn (.) sa?Indaki "y" kIsmI (ondalIk kIsIm) iÇin de geÇerli olup hiÇ rakam bulunmayaca?I gibi Çok sayIda rakamdan da olu?abilir. ??te bÖyle bir karakter dizilimi:
/\d*\.\d+/
gibi bir dÜzenli ifade gÖsterimi ile aÇIklanabilir. Örnekten de gÖrÜlece?i gibi, dÜzenli ifadeler bir bÖlÜ (/) i?areti ( ya da slash) ile ba?layIp yine bÖlÜ i?areti ile bitirilmektedirler. ?fadede bulunan \d 0-9 arasIndaki bir rakamI gÖstermekte iken * "sIfIr veya daha fazla"; \. nokta (.), + ise "bir veya daha fazla" anlamlarIna gelmektedir.

DÜzenli ?fade Desenleri

"Desenler" (patterns), bir karakter dizilimi iÇindeki karakterler iÇin sInama kriterlerini tanImlarlar. DÜzenli ifadeler dÜz metinler ?eklinde Çok basit olabilece?i gibi bazI Özel karakterler ve/veya "de?i?tiriciler" (modifiers) kullanIlarak oldukÇa karma?Ik halde de olu?turulabilirler. Herhangi bir desen, ara?tIrIlmasI istenen metnin bÖlÜ karakterleri arasIna yerle?tirilmesiyle, yani /desen/ ?eklinde yazIlarak tanImlanIr. Örne?in, bir karakter dizilimi iÇinde "ActiveZ"i aramak iÇin kullanIlacak desen /ActiveZ/ ?eklinde yazIlabilir.
Arama iÇin desene birtakIm seÇenekleri mÜmkÜn kIlan bazI de?i?tiriciler eklenebilir. Örne?in, yukarIda verilen Örnek karakter dizilimi iÇin verilen desen kÜÇÜk-bÜyÜk harf farklIlI?I gÖz ardI edilerek /ActiveZ/i ?eklinde yazIlabilir. Burada, "i" de?i?tiricisi desen iÇindeki karakterlerin kar?Ila?tIrIlmasI sIrasInda kÜÇÜk-bÜyÜk harf farkInIn gÖz ardI edilece?ini gÖstermektedir. Di?er de?i?tiriciler Tablo 1'de gÖrÜlmektedir.

Tablo 1. RegExp De?i?tiricileri

De?i?tirici

GÖrevi

g

Genel uyum (yazIldI?I gibi)

i

KÜÇÜk-bÜyÜk harf gÖz ardI edilerek uyum

m

Dizilim iÇinde Çoklu kar?Ila?tIrmalar iÇin $ ve ^ Özel karakterlerine izin verir

s

SatIrba?I (newine) kar?Ila?tIrmalarI iÇin . Özel karakterine izin verir

x

Desendeki beyaz bo?luklarI (whitespaces) gÖz ardI eder.


Bir veya daha fazla sayIda de?i?tirici birer kapatma bÖlÜ i?aretinden (closing slash) sonra birbirini izleyebilir. m ve s de?i?tiricileri daha sonra anlatIlaca?I gibi di?er Özel karakterlerin davranI?InI etkileyebilir.

Meta-Karakterler
Desenlerde "meta-karakter" kullanIlarak sadece harflerden olu?an sÖzcÜkler, sadece rakamlardan olu?an sayIsal giri?ler tanImlayabilece?imiz gibi bunlarIn herhangi bir kombinasyonudan olu?an alfa-sayIsal giri?ler de tanImlayabiliriz. Meta-karakterler Özel bir anlamI olan ve ters-bÖlÜ i?areti (\)'nin arkasIna yazIlan karakterlerdir. Örne?in, kÜÇÜk harf meta-karakteri sadece kÜÇÜk harflerden olu?acak bir giri?e kar?IlIk gelirken, tÜmleyicisi olan bÜyÜk harf meta-karakteri ise sadece bÜyÜk harflerden olul?an giri?lere olanak sa?layacaktIr. RegExp ile kullanIlacak meta-karakterlere ait liste a?a?Ida Tablo 2'de gÖrÜlmektedir.

Tablo 2. RegExp Meta-Karakterleri

Meta-karakter

AÇIklama

\s

Sekme veya satIrba?I gibi beyaz bo?luklar (whitespaces)

\S

Beyaz bo?luklar dI?Indaki tÜm karakterler

\b

SÖzcÜk ba?layIcIsI

\B

SÖzcÜk olmayan ba?layIcIlar

\d

0-9 arasIndaki bir rakam

\D

SayIsal olmayan karakterler

\w

Harfler, rakamlar veya altÇizgi

\W

Harf, rakam veya altÇizgi dI?Indaki tÜm karakterler

\A

Bir karakter diziliminin ba?I

\Z

Bir karakter diziliminin sonu



Özel Karakterler
RegExp'te yukarIda listelenen meta-karakterlerden ba?ka kullanImI meta-karakterlere benzeyen ancak ÖnÜnde ters-bÖlÜ i?areti olmayan bazI Özel karakterler de bulunmaktadIr. Bu Özel karakterler, esas olarak belli bir kritere uyumu denetlemek iÇin "sÜzgeÇ" olu?turmada kullanIlmaktadIrlar. Özel karakterler Tablo-3'te gÖrÜlmektedir.

Tablo 3. Özel Karakterler

Özel Karakter

AÇIklama

*

ÖnÜnde bulunan karakterin sIfIr veya daha Çok tekrarlanaca?InI ifade eder.

+

ÖnÜnde bulunan karakterin bir veya daha Çok tekrarlanaca?InI ifade eder.

?

Herhangi bir karakterin sIfIr veya daha Çok tekrarlanaca?InI ifade eder.

.

SatIrba?I (newline) karakteri hariÇ herhangi bir karakteri ifade eder.

^

\A meta-karakteri gibi bir karakter diziliminin ba?InI gÖsterir.

$

\Z meta-karakteri gibi bir karakter diziliminin sonunu gÖsterir.


Meta-karakterler ve yukarIdaki Özel karakterler bir arada kullanIlmak suretiyle Çok Özel bazI desenler olu?turulabilir. ?Öyle ki:
/\d+/
gibi bir desen bir veya daha Çok sayIda rakamdan olu?an bir deseni gÖsterirken:
/\d*\.\d+/
gibi bir desen ile makalenin ba?Inda vermi? oldu?umuz ve ondalIk bir sayI deseni gibi Çok daha Özel desenleri olu?turabiliriz. Desenleri olu?tururken noktanIn ters-bÖlÜ i?aretinin ÖnÜnde kullanIlmasI gerekti?i hatIrlanIlmalIdIr. ÇÜnkÜ nokta kendi ba?Ina Özel bir anlamI olan Özel bir karakterdir (Tablo 3). Bu nedenle, Özel karakterlerin kendilerini sIradan bir karakter olarak kullanIlmak istendi?inde ÖnÜnde mutlaka bir ters-bÖlÜ i?areti kullanIlmalIdIr. Örne?in, girilen bir dizilimde $ i?aretinin olup olmadI?InI denetlemek istersek:
/$/
?eklinde bir desen olu?turulmalIdIr. Dolar ($) i?aretini dizilimin ba?Inda olmasI istemi? olsaydIk:
/^$/
?eklinde bir desen yazmamIz gerekirdi.

Parentezler

RegExp ile tIpkI matematiksel ifadelerde oldu?u gibi birtakIm farklI alt desenleri gruplandIrmak iÇin normal (), kÖ?eli [] ve kÜme parantezler {} kullanIlabilmektedir.
Parantezler RegExp karakterlerinin birkaÇInI bir kerede beraberce gruplandIrmak iÇin kullanIlIr. Örne?in:
/(abc+)+/
gibi bir desende, tIpkI matematiksel ifadelerde oldu?u gibi, dI?ta yer alan ifadeden Önce parantez iÇindeki ifadenin ÇÖzÜmlenmesi sa?lanIr.
Parantezlerin Önemli sayIlabilecek bir kullanImI "geri-ba?vurular" (bacreferences) veya "kayItlI desen" (saved patterns) sonuÇlarI olarak adlandIrIlan desenlerin yaratIlmasIdIr. Bu sonuÇlar, uyumlarIn kesin olarak bulunup bulunmadI?InI belirlemek Üzere geri-ba?vurularIn yapIlmasIna olanak sa?lamaktadIrlar. Örne?in, e?er bir desen iki Çift paranteze sahip ise iki geri-ba?vuru depolayabilir. Geri-ba?vurular 'den 'a kadar bulunan de?i?kenler ?eklinde depolanIrlar. ?Öyle ki:
/(\D+)(\d+)\.(\d+)/
deseni, "IE 5.5" gibi bir dizilimin denetlenmesinde kullanIldI?Inda de?i?kenine "IE", de?i?kenine "5" ve de?i?kenine "5" depolayacaktIr.
Kar?Ila?tIrma denetiminde, dizilim iÇinde bulunmasI mutlaka istenen karakterler kÖ?eli parantezler iÇine alInarak gruplanIr. Örne?in:
/[aeious]+/
deseninde, "s" sessizi ile gruplanan "o", "u", "a" ve "e" gibi sesliler "sen", "san", "sun" veya "sin" gibi dizilimler aramak iÇin kullanIlabilir.
/^(b[eÜia]k)+/ deseni ise:
Denetlenen dizilimin ba?Inda "bak", "bek" veya "bÜk" gibi sÖzcÜklerden bir veya birden fazla sayIda sÖzcÜk olup olmadI?InI saptamak iÇin kullanIlIr.
/[^abc]/ deseninde:
ise parantez iÇinde yer alan karakterler dI?Indaki karakterlerin olmasI arzu edilmektedir. Yani, iÇinde "a", "b" ve "c" harfleri bulunmayan ancak kÜÇÜk harflerden olu?an bir karakter dizilimi istenmektedir.
RegExp desenlerinde, herhangi bir karakterin tekrarlanI? sayIsInI tanImlamak iÇin kÜme parantezler kullanIlmaktadIr. Örne?in:
/x{n}/
deseni, ÖnÜndeki "x" karakterinin kesin olarak "n" defa tekrarlanmasI gerekti?ini belirtmektedir. Burada "n" sayIsInIn pozitif bir tamsayI olmasI gerekti?i hatIrlanmalIdIr.
/x{n,}/
deseninde ise "x" karakterinin en az "n" defa olmak kaydIyla daha fazla sayIda tekrarlanmasI istenmektedir. Bu durumda, {1,} + ile aynI anlama sahip olup 1 veya daha Çok tekrarI gÖsterir. Benzer ?ekilde, {0,} ise * ile aynI olup karakterin sIfIr veya daha fazla olabilece?ini ifade etmektedir.
Son olarak:
/x{n,m}/
gibi bir desen "x" karakterinin en az "n" ve en Çok "m" kez olmasI gerekti?ini ifade etmektedir. Bu durumda, {0,1} ?eklindeki Özel bir ifade ÖnÜnde bulunan karakterin hiÇ olmayaca?I gibi en Çok 1 tane olmasI gerekti?ini belirtmekte olup ? Özel karakterleri ile aynI anlama gelir.
YukarIda aÇIklanan Özel karakterler dI?Inda kullanIlabilecek iki Özel karaktyer daha vardIr ki, bunlar ancak parantezler iÇinde yani "ta?IyIcIlar" ile kullanIlabilirler:
•    Dik Çizgi (|) ve
•    Tire (-)
Bunlardan ilki yani dik Çizgi "veya" anlamIna gelir. Örne?in:
/(x|y)/
deseni "x" veya "y" karakteri anlamIna gelir. Biraz daha geli?mi? bir Örnek ile aÇIklarsak:
/(x|y)+/
deseni "x" ya da "y"nin birden fazla tekrarlanmasInI ifade etmektedir.
Tire (-) karakterine gelince, belli bir karakter aralI?InI ifade etmek iÇin kullanIlIr. Örne?in:
/[a-z]/
deseni "a" dan "z" ye kadar olan tÜm kÜÇÜk harfleri ifade eder. AynI i?lemi rakam aralI?I iÇin de yapabiliriz. ?Öyle ki:
/[2-4]+/
deseninde 2,3 ve 4 rakamlarInIn birden fazla tekrarlanIlaca?I tanImlanmaktadIr. Benzer ?ekilde:
/[^x-z]
deseni "x-z" aralI?I dI?Inda kalan tÜm karakterleri gÖstermekte; yani "x", "w", "u" ve "z" dI?Inda karakterler olmasI gerekti?ini ifade etmektedir.

BazI YaygIn KullanIlan DÜzenli ?fade Desenleri

A?a?Ida, Tablo 4'te Web uygulamalarInIn Ço?unda yaygIn olarak kullanIlan bazI dÜzenli ifade desenleri gÖsterilmektedir.

Tablo 4. YaygIn KullanIlan BazI DÜzenli ?fade Deseni Örnekleri

Veri tÜrÜ

RegExp

Kabul Edilen

Beyaz bo?luk

/^\s+$/

Bo?luklar, sekmeler vd.

Tek harf

/^[a-zA-Z]$/

a-z veya A-Z aralI?Inda bir harf

Tek rakam

/^\d/

0-9 aralI?Inda bir rakam

Tek harf veya rakam

/^([a-zA-Z]|\d)$/

a-z veya A-Z aralI?Inda bir harf veya 0-9 aralI?Inda bir rakam

Alfabetik dizilim

/^[a-zA-Z]+$/

BÜyÜk ve/veya kÜÇÜk harflerin herhangi bir kombinasyonu olan bir karakter dizilimi

AlfasayIsal dizilim

/^[a-zA-Z0-9]+$/

Harfler ve/veya rakamlarIn herhangi bir kombinasyonundan olu?an bir dizilim

TamsayI

/^\d+$/

??aretsiz pozitif tamsayI

??aretli TamsayI

/^(+|-)?\d+$/

Negatif veya pozitif i?areti olan tamsayI

OndalIk SayI

/^((\d+(\.\d*)?)|((\d*\.)?\d+))$/

??aretsiz ondalIk sayI

??aretli OndalIk SayI

/^(((+|-)?\d+(\.\d*)?)|((+|-)?(\d*\.)?\d+))$/

Negatif veya pozitif i?areti olan ondalIk sayI

E-posta adresi

/^.+\@.+\..+$/

@ i?areti ve en az bir nokta iÇeren e-posta adresi


SonuÇ
Bu makalede, dÜzenli ifadelere (regular expressions) bir giri? yapIlmI? olup ASP.NET sayfalarIndaki Web formlarInda bulunan form alanlarIna yapIlan giri?lerin belli bir desene uyumlulu?unun denetiminde sa?layaca?I kolaylIklar kIsaca Örneklenmi?tir. DÜzenli ifadeler, form alanlarIna yapIlan sayIsal giri?ler ve metinlerin gerek do?rulu?unun ve gerekse aralI?InIn denetlenmesinde gerÇekten Çok az kodlama ile etkin uygulama geli?tirilmesinde bÜyÜk kolaylIklar sa?lamaktadIr. DÜzenli ifadelerdeki desenler elbette, form alanIna girilen verilerin tam olarak geÇerli olup olmadI?InI denetlemek ve hatta do?rulu?undan emin olmayI sa?lamak iÇin mÜkkemmel bir araÇ olmamakla birlikte standart veya normal sayIlabilecek giri?lerin testinden Önemli bir etkenlik aracI durumdadIr.
Kolay gelsin.

Regular expressions are a powerful tool for performing pattern matches in Strings in JavaScript. You can perform complex tasks that once required lengthy procedures with just a few lines of code using regular expressions. Regular expressions are implemented in JavaScript in two ways:

Literal syntax:

//match all 7 digit numbers
var phonenumber= /\d{7}/

Dynamically, with the RegExp() constructor:

//match all 7 digit numbers (note how "\d" is defined as "\d")
var phonenumber=new RegExp("\d{7}", "g")

The RegExp() method allows you to dynamically construct the search pattern as a string, and is useful when the pattern is not known ahead of time.

Related Tutorials (highly recommended readings)

Pattern flags (switches)

Property Description Example
 i Ignore the case of characters. /The/i matches "the" and "The" and "tHe"
 g Global search for all occurrences of a pattern /ain/g matches both "ain"s in "No pain no gain", instead of just the first.
 gi Global search, ignore case. /it/gi matches all "it"s in "It is our IT department" 
 m Multiline mode. Causes ^ to match beginning of line or end of string. Causes $ to match end of line or end of string. JavaScript1.5+ only. /hip$/m matches "hip" as well as "hip\nhop"

Position Matching

Symbol Description Example
 ^ Only matches the beginning of a string. /^The/ matches "The" in "The night" by not "In The Night"
 $ Only matches the end of a string. /and$/ matches "and" in "Land" but not "landing"
 \b Matches any word boundary (test characters must exist at the beginning or end of a word within the string) /ly\b/ matches "ly" in "This is really cool."
 \B Matches any non-word boundary. /\Bor/ matches “or” in "normal" but not "origami."
(?=pattern) A positive look ahead. Requires that the following pattern in within the input. Pattern is not included as part of the actual match.  JavaScript1.5+ only. /(?=Chapter)\d+/ matches any digits when it's proceeded by the words "Chapter", such as 2 in "Chapter 2", though not "I have 2 kids."
(?!pattern) A negative look ahead. Requires that the following pattern is not within the input. Pattern is not included as part of the actual match.  JavaScript1.5+ only. /JavaScript(?! Kit)/ matches any occurrence of the word "JavaScript" except when it's inside the phrase "JavaScript Kit"

Literals

Symbol Description
Alphanumeric All alphabetical and numerical characters match themselves literally. So /2 days/ will match "2 days" inside a string.
\O Matches NUL character.
 \n Matches a new line character
 \f Matches a form feed character
 \r Matches carriage return character
 \t Matches a tab character
 \v Matches a vertical tab character
 \xxx Matches the ASCII character expressed by the octal number xxx.

"" matches left parentheses character "("
 \xdd Matches the ASCII character expressed by the hex number dd.

"\x28" matches left parentheses character "("
 \uxxxx Matches the ASCII character expressed by the UNICODE xxxx.

"\u00A3" matches "£".

The backslash (\) is also used when you wish to match a special character literally. For example, if you wish to match the symbol "$" literally instead of have it signal the end of the string, backslash it: /$/ 

Character Classes

Symbol Description Example
 [xyz] Match any one character enclosed in the character set. You may use a hyphen to denote range. For example. /[a-z]/ matches any letter in the alphabet, /[0-9]/ any single digit. /[AN]BC/ matches "ABC" and "NBC" but not "BBC" since the leading “B” is not in the set.
 [^xyz] Match any one character not enclosed in the character set. The caret indicates that none of the characters

NOTE: the caret used within a character class is not to be confused with the caret that denotes the beginning of a string. Negation is only performed within the square brackets.

/[^AN]BC/ matches "BBC" but not "ABC" or "NBC".
 . (Dot). Match any character except newline or another Unicode line terminator. /b.t/ matches "bat", "bit", "bet" and so on.
 \w Match any alphanumeric character including the underscore. Equivalent to [a-zA-Z0-9_]. /\w/ matches "200" in "200%"
 \W Match any single non-word character. Equivalent to [^a-zA-Z0-9_]. /\W/ matches "%" in "200%"
 \d Match any single digit. Equivalent to [0-9].
 \D Match any non-digit. Equivalent to [^0-9]. /\D/ matches "No" in "No 342222"
 \s Match any single space character. Equivalent to [ \t\r\n\v\f].
 \S Match any single non-space character. Equivalent to [^ \t\r\n\v\f].
 

Repetition

Symbol Description Example
{x} Match exactly x occurrences of a regular expression. /\d{5}/ matches 5 digits.
{x,} Match x or more occurrences of a regular expression. /\s{2,}/ matches at least 2 whitespace characters.
{x,y} Matches x to y number of occurrences of a regular expression. /\d{2,4}/ matches at least 2 but no more than 4 digits.
? Match zero or one occurrences. Equivalent to {0,1}. /a\s?b/ matches "ab" or "a b".
* Match zero or more occurrences. Equivalent to {0,}. /we*/ matches "w" in "why" and "wee" in "between", but nothing in "bad"
+ Match one or more occurrences. Equivalent to {1,}. /fe+d/ matches both "fed" and "feed"

Alternation & Grouping

Symbol Description Example
( ) Grouping characters together to create a clause. May be nested. /(abc)+(def)/ matches one or more occurrences of "abc" followed by one occurrence of "def".
(?: ) Grouping only, so items are grouped into a single unit, but the characters that match this group are not remembered. In other words, no numbered references are created for the items within the parenthesis. JavaScript 1.5 feature. /(?:.d){2}/ matches but doesn't capture "cdad".
 
| Alternation combines clauses into one regular expression and then matches any of the individual clauses. Similar to "OR" statement. /(ab)|(cd)|(ef)/ matches "ab" or "cd" or "ef".

Back references

Symbol Description Example
( )\n Matches a parenthesized clause in the pattern string. n is the number of the clause to the left of the back reference. (\w+)\s+ matches any word that occurs twice in a row, such as "hubba hubba." The denotes that the first word after the space must match the portion of the string that matched the pattern in the last set of parentheses. If there were more than one set of parentheses in the pattern string you would use or to match the appropriate grouping to the left of the backreference. Up to 9 backreferences can be used in a pattern string.

Regular Expression methods

Method Description Example
String.match( regular expression ) Executes a search for a match within a string based on a regular expression. It returns an array of information or null if no match are found.

Note: Also updates the … properties in the RegExp object.

var oldstring="Peter has 8 dollars and Jane has 15"
newstring=oldstring.match(/\d+/g)
//returns the array ["8","15"]
String.replace( regular expression, replacement text ) Searches and replaces the regular expression portion (match) with the replaced text instead.

Note: Also supports the replacement of regular expression with the specified RegExp … properties.

var oldstring="(304)434-5454"
newstring=oldstring.replace(/[\(\)-]/g, "")
//returns "3044345454" (removes "(", ")", and "-")
String.split ( string literal or regular expression ) Breaks up a string into an array of substrings based on a regular expression or fixed string. var oldstring="1,2, 3,  4,   5"
newstring=oldstring.split(/\s*,\s*/)
//returns the array ["1","2","3","4","5"]
String.search( regular expression ) Tests for a match in a string. It returns the index of the match, or -1 if not found. Does NOT support global searches (ie: "g" flag not supported). "Amy and George".search(/george/i)
//returns 8
RegExp.exec(string) Applies the RegExp to the given string, and returns the match information. var match = /s(amp)le/i.exec("Sample text")
//returns ["Sample","amp"]
RegExp.test(string) Tests if the given string matches the Regexp, and returns true if matching, false if not. var pattern=/george/i
pattern.test("Amy and George")
//retuns true

1. Regex Nedir?


    Regular expressions (düzenli ifadeler) ifadesinin k?salt?lm?? halidir. Karma??k katarlar? belli kal?plar dahilinde tan?mlar. Bu kal?plara uyan ifadeleri buldu?u zaman iste?imize göre üzerinde i?lem yapar.


2. Regex hangi dillerde kullan?l?r?


    Düzenli ifadeler, bir çok dilde ve uygulamada kullan?l?r: egrep, emacs, expect, find, grep, javascript, lex, lips, mawk, mysql, perl, php, vi, tcl, gawk, sed...
Bu yaz?daki düzenli ifade örnekleri sed uygulamas? yard?m? ile verilecektir.


3. Avantajlar?


    Düzenli ifadeler, karma??k katarlar? belli kal?plara çevirip kulland??? için basittirler ve ta??nabilirdirler. Regex mant???n? kavrad?ktan sonra di?er dil ve uygulamalarda kullanmak da kolayd?r.


4. Regex'in Temelleri


    Düzenli ifadeler normal karakterler ve meta karakterlerden olu?ur. Normal karakterler, büyük - küçük harfleri ve rakamlar? ifade eder. Meta karakterlerin anlamlar? ileriki sat?rlarda aç?klanacakt?r.

    Basit anlamda düzenli ifade, verdi?iniz kal?ba uyan katar? arar. Mesela 'deneme' katar? hiç meta karakter içermez. 'deneme' katar?, 'deneme 123' katar? ile benze?ir ama 'Deneme' katar? ile benze?mez.

    grep metin arama program?na bir düzenli ifade kal?b? verelim: "comu". Bu kal?p c,o,m ve u harflerinin ard???k olanlar?n? arar ve buldu?u sat?rlar? ekrana basar. Ekrana yaz?lan sat?rlar ?unlar olabilir:

    comu
    comulib
    libcomu

 

   4.1 Sat?r Ba?lar? Ve Sonlar?

    Anla??lmas? en kolay karakterlerden ikisi ^ ve $ karakterleridir. ^ sat?r ba??, $ ise sat?r sonu anlam?na gelir. '^linux' dosya sat?rba?lar?nda linux yazan sat?rlar? ekrana basar. Ayn? ?ekilde 'linux$' ise sat?r sonunda linux yazan sat?rlar? ekrana basar.

 

   4.2 Bir Kaç Karakterin Herhangi Biri ile Uyu?mas?

     'kuma[?r]', kuma? ve kumar kelimelerine e?ittir. kuma?r veya kumar? kelimelerine e?it de?ildir. Ayn? ?ekilde '[dD]emir' ifadesi demir ve Demir'e e?ittir. Bu kelimeler di?er kelimelere biti?ik olabilir. Mesela ayn? kal?p demirk?ran kelimesine de e?ittir.

    Bu özellik HTML ba?l?klar? ile çal???rken i?e yarayabilir: '<H[123456]>' ifadesi <H1>, <H2>, ..., <H3> ifadeleriyle uyu?ur. Ayn? ifadeyi ?u ?ekilde de yazabiliriz: '<H[1-6]>'. Bu ifade yapaca?? i? aç?s?ndan '<H[123456]>' ifadesi ile birebir ayn?d?r. Tire (-) i?areti menzil belirtir.

    Ba?ka bir örnek: '[a-z]' ifadesi bütün küçük harfleri kapsar. Kö?eli parantez içinde iki tire kullanabiliriz. '[a-zA-Z]' ifadesi bütün büyük ve küçük harflerin herhangi birisi anlam?na gelir. '[a-z123]id' ifadesi : Küçük harflerden biri veya 1,2,3 rakamlar?ndan birisiyle ba?lay?p ard?ndan i ve d harfleri takip eden kelimeler anlam?na gelir.

 

   4.3 Herhangi Bir Karakter D???ndakileri Aramak

    [1-6] 1 ve 6 aras?nda ki herhangi bir rakam anlam?na gelir. [^1-6] ise bu rakamlar haricindekiler anlam?na gelir. ^ karakteri önceden de bahsetti?imiz gibi sat?r ba?? anlam?na da gelir. Ama buradan, görüldü?ü gibi farkl? bir amaç için kullan?lm??t?r. Bunlar? ay?rmak çok basittir; hariç anlam?na gelen ^ karakteri kö?eli parantez içinde kullan?l?r.

    Bir kelime listesi olu?tural?m ve içinde farkl? farkl? sat?rlarda 'linux' ve 'unix' yazs?n.

]# grep u[^x] kelime.txt
unix
]#


    Burada her sat?r ara?t?r?lm??t?r ve u harfinden sonra x harfinin gelmedi?i sat?rlar ekrana yazd?r?lm??t?r.

 

   4.4 Herhangi Bir Karakter ?le Uyu?um-Nokta

    Tarihler ülkeden ülkeye de?i?irler ve farkl? ?ekillerde gösterilebilirler. 23-04-2003, 23/04/2003, 23.03.2003 gibi...

    '23.04.2003' ifadesi bu üç durum ile de uyu?ur. Nokta burada meta karakter olarak kullan?lm??t?r. '23[.-/]04[.-/]2003' ifadesinde ise meta karakter görevinde de?ildir. Ama unutmamak gerekir ki nokta karakteri herhangi bir karakterle uyu?ur. Yani '23.04.2003' düzenli ifadesi '23a04a2003' katar?na da e?it olabilir. Bu sebeple böyle durumlarda '23[.-/]04[.-/]2003' ifade kal?b?n? kullanmak daha mant?kl?d?r.

 

   4.5 Bir Kaç ?fadenin Herhangi Biri ?le Uyu?umu

    Birkaç ifadenin herhangi biriyle uyu?um i?lemleri için boru '|' karakteri kullan?l?r. Ne var ki bu karakter her program ve uygulama taraf?ndan desteklenmemektedir. '|' veya anlam?na gelir. 'ben|sen' içersinde ben veya sen bulunan katarlar anlam?na gelir.

]# cat deneme
ben miyim?
sen misin?
o mu?
]# egrep '(ben|sen)' deneme
ben miyim?
sen misin?
]# egrep '(b|s)en' deneme
ben miyim?
sen misin?
]#



    Boru meta karakterinin kullan?m?na izin veren uygulamalardan biri de egrep'tir. Burada deneme ad?nda bir dosyaya yaz?lar yaz?lm??t?r ve içinde ben veya sen katar? bulunan sat?rlar ekrana yaz?lm??t?r. egrep komutunun uyguland??? ikinci sat?rda ise b ve s harflerinin ard?ndan en katar? aranm??t?r ve bulunan sonuçlar ekrana yaz?lm??t?r.

    '[bs]en' ifadesi '(b|s)en' ifadesi ile ayn? anlama gelmektedir. E?er '(b|s)en' ifadesinde parantez kullan?lmazsa 'b' veya 'sen' katarlar? aran?r, ama as?l aranmas? gereken ifade 'ben' veya 'sen' dir.

    '^Konu','^Kimden' ve '^Tarih' ifadeleri k?saca ?u ?ekilde yaz?labilir: '^(Konu|Kimden|Tarih)'.

 

   4.6 Kelimeyi S?n?rlamak

    Düzenli ifadeler katarlarla çal??t??? için, sizin olu?turdu?unuz ifadelerin katar e?leni?ini bulur ve iste?inize göre de?i?tirir veya ekrana yazd?r?r. Ama baz? durumlarda ifadelerinizin e?lenikleri ba?ka ba?ka katarlarla bile?ik yaz?lm?? olabilir. Mesela aratt???n?z ifadenin katar e?leni?i 'demir' olsun. Bu durumda size 'demirk?ran' katar?n? içeren sat?rlar da gösterilecektir. Bunu engellemek için '/<' ve '\>' meta karakterleri kullan?l?r. < veya > karakterleri önüne ters e?ri çizgi (backslash) ald?klar? zaman meta karaktere dönü?ürler.

    '\<deneme' ifadesi kelimenin ba?? 'deneme' olan katarlar? 'deneme\>' ifadesi kelime sonunda 'deneme' katar? olan ifadeleri bulur. '\<deneme\>' ifadesi ise içinde sadece 'deneme' katar? kelimelerini bulur

]# cat liste
deneme
deneme123
123deneme
]# egrep '\<deneme' liste
deneme
deneme123
]# egrep 'deneme\>' liste
deneme
123deneme
]# egrep '\<deneme\>' liste
deneme
]#


 

   4.7 ?ste?e Ba?l? Seçenekler

    '?' i?areti iste?e ba?l? kullan?labilen bir meta karakterdir. '?' i?areti kendinden önce gelen karakterin s?f?r veya bir fazla tekrar? anlam?na gelir.

]# cat > liste
algoritma
alghoritma
]# egrep 'algorith?ma' liste
algoritma
algorithma
]#

 

    Soru i?aretinden önceki 'h'nin s?f?r veya bir defa bulundu?u durumlar ekrana yaz?lm??t?r. Bu örnekte s?rayla aranan karakterler ?u ?ekildedir: a, l, g, o, r, i, t, h? (h karakterinin s?f?r veya bir defa bulundu?u durumlar), m, a.

    Ba?ka bir örnek: '(Oca|Ocak)' ?eklinde bir ifade kullanaca??m?z? varsayal?m. Bunun yerine 'Ocak?' ifadesini kullanabiliriz. Soru i?areti karakteri sadece kendinden önce gelen karakterler için kullan?lmaz. Mesela, (13|13'üncü) ifadesi yerine "13('üncü)?" yaz?labilir. Burada parantezler ile grupland?rma yap?lm??t?r. Ve soru i?areti karakteri, kendinden önceki grubun 0 veya 1 defa olma olas?l???n? arayacakt?r.

 

   4.8 Di?er Miktar Belirteçleri:Tekrar Say?lar?

    Art? (+) meta karakteri bir veya daha fazla tekrar anlam?na gelir. Y?ld?z (*) meta karakteri s?f?r veya daha fazla tekrar anlam?na gelir.
]# cat > miktar
13
13'üncü
]# egrep '^ +' miktar (bu ifade miktar dosyas?nda ki sat?r ba?lar?nda 1 veya daha fazla bo?luk olan sat?rlar? listeler)
13
] #egrep '^ *' miktar (bu ifade de miktar dosyas?nda ki sat?r ba?lar?nda 0 veya daha fazla bo?luk olan sat?rlar? listeler)
13
13'üncü
]#

 

    Ba?ka bir örnek:

]# cat merhaba.html (Varsayal?m ki html taglar?n?n aras?na yanl??l?kla bo?luk koydunuz; sonuçta html sayfan?z yanl?? görüntülenecektir)
< html>
<head>
</head>
<body>
Regex Ve Linux
</body>
</html>
]# egrep '< *html>' merhaba.html (bu ifade ile yanl?? sat?rlar? bulmak mümkün olacakt?r)
< html>
]#


Meta karakter

Alt Limit

Üst Limit

?

0

1

*

0

s?n?rs?z

+

1

s?n?rs?z

 

   4.9 Özelle?tirilmi? Miktar Belirteçleri

    Bu ba?l??? bir örnek üzerinde aç?klayal?m. x{1,3} ifadesi x,xx ve de xxx ifadelerine denk gelir.

]# cat > limit.txt (limit.txt dosyas? olu?turuluyor ve içine veriler giriliyor)
x
xx
xxx
a
aa
aaa
]# egrep 'x{0,3}' limit.txt (x karakterinin ard? ard?na s?f?r ve üç (0 ve 3 dahil) aras? tekrar? aran?yor)
x
xx
xxx
a
aa
aaa
]# egrep 'x{1,3}' limit.txt (x karakterinin ard? ard?na bir ve üç aras?(1 ve 3 dahil) tekrar? aran?yor)
x
xx
xxx
]#


   4.10 Parantezler ve Ters E?ri Çizgiler (Backslashes)

    Parantezler, ifadeleri grupland?rmak için kullan?l?r. Ters e?ri çizgiler ise grupland?r?lm?? ifadelerin saklanmas? için kullan?l?r. En fazla 9 tane grup saklayabilirler. Bu bölümdeki regex örnekleri sed üzerinde olacakt?r.

]# cat > parantezler.txt
linux ve regex
linux ve unix
unix
]# sed 's/\(linux\)/x/g' parantezler.txt
linuxx ve regex
linuxx ve unix
unix
]#
 

    Burada linux ifadesi grupland?r?lm?? ve 1 ile saklanm??t?r.'1x' 'linuxx' de?erine e?ittir.

 

   4.11 Meta Karakter Aramak

    E?er arayaca??m?z katar, meta karakter içeriyorsa ne yapmal?y?z? Mesela arayaca??m?z katar 'www.comu. edu.tr' olsun. Elbette buradaki noktalar meta karakter de?ildir. Ters e?riler sayesinde 'www\.comu\. edu\.tr' düzenli ifadesi 'www.comu. edu.tr' katar?na denktir. Ters e?ri çizgiler sadece bu amaçla kullan?lmaz; \< \>, \( \) ifadeleri ba?l? ba??na meta karakterdir.


5. Tablolar

 

    5.1 Meta Karakter Tablosu

. Herhangi bir tek karakterle uyu?ur. 'k.z' ifadesi 'kaz' veya 'k?z' ile uyu?ur ama kiraz ile uyu?maz.
$ Sat?r sonu anlam?na gelir. 'ö?renci$' ifadesi 'o bir ö?renci' ifadesi ile uyu?ur, ama 'o bir ö?rencidir' ifadesi ile uyu?maz.
^ Sat?r ba?? anlam?na gelir. '^özgür' ifadesi 'özgür yaz?l?m' ile uyu?ur ama 'linux ve özgür yaz?l?m' ile uyu?maz.
* Kendinden önce gelen karakterin s?f?r veya daha fazla tekrar? anlam?na gelir. '.*' ifadesi herhangi uzunluktaki bir kelime ile uyu?ur.
\ E?er herhangi bir meta karakter düzenli ifadeler içinde kullan?lacaksa önüne '\' getirilir. '$' ifadesi '$' karakterine kar??l?k gelir.
[ ]
[x1-x2]
[^x1-x2]
Kö?eli parantezin içindeki herhangi bir karakter ile uyu?mas? anlam?na gelir. 's[eo]r' ifadesi 'ser' ve 'sor' ile uyu?ur. Kö?eli parantez içinde kullan?lan tire i?areti menzil belirtir. [0-9] herhangi bir rakam anlam?na gelir. [A-Za-z] ifadesi herhangi bir büyük harf veya küçük harfle uyu?ur. ^ karakteri hariç anlam?na gelir. [^123a-z] ifadesi 1,2,3 rakamlar? ve küçük harfler hariç anlam?na gelir.
\< \> \< bir kelimenin ba?? ,\> ise bir kelimenin sonu anlam?na gelir. \< \> ise direk olarak bir kelimeye kar??l?k gelir.
\( \) ?fadeyi grupland?r?r. Ayr?ca grupland?r?lm?? ifadelere denk gelen katarlar? saklar.En fazla 9 katar saklayabilir ve , gibi gösterilir.
| ?ki durumun beraber ifade edilmesi durumunda kullan?l?r. (benim|senin) ifadesi 'bu benim' ve 'bu senin' ifadeleri ile uyu?ur. Ama 'bu bize ait' ifadesi ile uyu?maz.
+ Kendinden önce gelen karakterin bir veya daha fazla tekrar? anlam?na gelir. 'x+' ifadesi 'x,xx' ve 'xxx' ifadesi ile uyu?ur.
? Kendinden önceki karakterin 0 veya 1 tekrar? anlam?na gelir. Not: Bütün dil ve uygulamalarda desteklenmez.
\{ \} Bu ifade bizim belirledi?imiz say?da tekrar anlam?na gelir. A\{3\} ifadesi 'A' harfini takip edecek 3 rakamdan olu?an katar anlam?na gelir. Mesela: A123 veya A785 Not: Bu meta karakter bütün dil ve uygulamalar taraf?ndan desteklenmeyebilir.
\{i,j\} Bu ifade bizim belirledi?imiz menzil say?s?nda tekrar anlam?na gelir. [0-9]\{3,5\} ifadesi ard? ard?na 3, 4 veya 5 tane gelecek rakamlardan olu?an katarlar? ifade eder. Not: Bu meta karakter bütün dil ve uygulamalar taraf?ndan desteklenmeyebilir.

 

    5.2 Uyumluluk Tablosu

 

 

.

[]

^

$

\( \)

\{ \}

?

+

|

( )

vi x x x x x          
visual c++ x x x x x          
awk x x x x     x x x x
sed x x x x x x        
Tcl x x x x x   x x x x
ex x x x x x x        
grep x x x x x x        
egrep x x x x x   x x x x
fgrep x x x x x          
perl x x x x x   x x x x



6. SED

 

   6.1 Sed Nedir?

    SED bir stream editörü, düzenleyicidir. Bir ak?m düzenleyicisi ,dosya yada borudan gelen girdideki temel metin dönü?türmelerini gerçekle?tirir. Yani dosya yada standart girdiden metni okur ve bunu kullan?c?n?n istedi?i biçime dönü?türerek standart ç?kt?ya okur. SED girdi/girdiler üzerinde yaln?zca bir kere geçi? yapar;böylece verim artar. Ama SED’in as?l yetene?i bir metni boruya filtre edebilmesidir. Bu da SED’i di?er düzenleyici çe?itlerinden ay?r?r. SED komut sat?r? veya bir kabuk program? içinden kullan?labilir.

   6.2 Sed - Verilerin Ara Belle?e Al?nd??? Yer

    SED üç alandan olu?ur : Giri? alan? (input space), Örüntü alan? (patern space) ve Tutma alan? (hold space). Giri? alan? yaln?zca bir kez okunur ve at?l?r. Örüntü alan?na giri? alan?ndaki sat?rlar okunur ve metin dönü?ümleri yap?l?r.Genel olarak ç?kt?ya burada i?lenen metin gönderilir. Tutma alan? ise ba?lang?çta bo?tur, bir nevi çal??an ara bellektir.

 

   6.3 Sed Parametreleri

    SED a?a??daki komut sat?r? seçeneklerini içerebilir :

'-v'

'--version'

    Çal??t?r?lan SED’in sürümünü ve telif hakk? bilgilerini yazar.

'-h'

'--help'

    Hata raporu adreslerini ve komut sat?r? seçeneklerini özetleyen bir kullan?c? mesaj? yazar.

'-n'

'--quiet'

'--silent'

    SED’in varsay?lan de?eri betik içindeki her dönü?ün sonuna örüntü alal?n? yazar. Bu seçenek bu otomatik yaz?m? kald?r?r.(Otomatik yaz?m? tekrar kullanmak için p komutu kullan?l?r).

'-e script'

'--expression=script'

script dosyas? içerisindeki komutlar? girdi i?lenirken çal??t?r?lacak olan komutlara ekler.

'-f script-file'

'--file=script-file'

script-file dosyas?ndaki komutlar? girdi i?lenirken çal??t?r?lacak olan komutlara ekler.

    E?er -e,-f ,-expression yada –file seçenekleri verilmemi?se komut sat?r?ndaki ilk argüman çal??t?r?lacak olan betik olarak al?n?r.

    Yukar?daki i?lemlerden sora herhangi komut sat?r? parametresi kal?rsa, bu i?lenecek dosyan?n ad?ym?? gibi yorumlan?r. Bir dosya ad? standart giri? ak?m?n? temsil etmektedir. E?er hiç dosya ad? belirtilmemi?se standart girdi i?lenir.

 

   6.4 Sed Programlar?

    Bir SED program? –e,-f,--expression gibi seçenekleri içeren bir yada daha fazla SED komutundan olu?ur. Her SED komutu bir karakterlik komut ad? ve özel komut kodu ard?ndan seçili bir adres yada adresler dizisi içerir.

 

   6.5 Sed ?le Sat?r Seçme

    SED betiklerinde adresler a?a??daki formlardan birisi olabilir :

‘number’

    Girdiden yaln?zca sat?r numaras? verilen sat?rlar seçilir.

‘first~step’

    Sat?rlar verilen first de?erindeki sat?rdan step de?erindeki aral?klarla seçilir.

‘$’

    Bu adres son girdi dosyas?n son sat?r?n? seçer.

‘/regexp/’

    Regexp düzenli ifadesiyle e?le?en sat?rlar? seçer.

‘%regexp%’

    (% yerine ba?ka tek karakter gelebilir) Bu da regexi e?le?tirir. Regexde çok “/ ” varsa “/ ” lerin kar??mas?n? önlemek için kullan?l?r.

‘/regexp/I’ yada ‘ \ %regexp% I’

    “I” niteleyicisi regexin durum-duyars?z (case-insensitive) olarak e?lenmesini sa?lar.

    E?er hiç adres verilmezse tüm sat?rlar seçilir.;e?er bir adres verilmi?se sadece o adresle e?le?en sat?rlar seçilir.

    Adres dizinleri '(,)' ile birbirinden ayr?l?r. ?kinci adres bir regex ise biten e?lemenin kontrolü ilk adresteki seçilmi? sat?rlar? izleyen sat?rlardan ba?lar. E?er ikinci adres ilk adresteki sat?rlardan daha az yada e?it bir numara ise sadece bir sat?r seçilir.

'!' karakteri bir adres dizini ard?ndan geldi?inde adres dizininde e?lenmeyen sat?rlar seçilir.Bu ayr?ca bo? (null) adresler için de çal???r.

   6.6 Komutlar

    SED de bir metni bir ba?kas? içine yerle?tirmek mümkündür. Yerle?tirme basit yerine koymalardan (küçük_büyük harf) veya çok karma??k yerine koymalardan(1den itibaren tüm tamsay?lar?n artmas?) olu?abilir.

    ‘#’ [adreslere izin yok] Bu komut bir sonraki yeni sat?ra kadar yeni bir yorum açar. Baz? SED uygulamalar? yaln?zca tek sat?r yorum yazmay? destekler. Bu uygulamalarda beti?in birçok ilk karakteri “#” ise dikkatli olunmal?d?r. E?er SED beti?inin ilk iki karakteri “ # n” ise –n seçene?i zorunludur. Beti?in ilk sat?r?na “n” ile ba?layan bir yorum koymak için ya “N” kullan?lmal? yada “n” den önce en az bir bo?luk b?rak?lmal?d?r.

    ‘s/regexp/yerle?tirilen/flags’ [“/ ” karakteri yerine bir ba?ka tek karakter kullan?labilir.] Bu komutla regexpdeki düzenli ifade yerle?tirilen de?eri ile yer de?i?tirir. Regexp yada yerle?tirilen ifadelerinde “ / ” (yada kullan?lan di?er karakter) yer alacaksa ba??na “ \ ”konulmal?d?r. Yine son yerle?meye \, & yada yeni sat?r eklemek için ba?lar?na“ \ ”karakteri konulmal?d?r. s komutu a?a??daki flag/flagleri içerebilir:

‘g’ Yeni yerle?tirmeyi tüm sat?rlara uygular.

‘p’ Yerle?tirme gerçekle?mi?se yeni örüntü alan?n? yazar.

‘number’ Sadece numaralanm?? e?lemeleri yeniden yerle?tirir.

‘w dosya-ad?’ Yerle?tirme gerçekle?mi?se sonuçlar? dosya ad? ile verilen dosyaya yazar.

‘I’ E?lemeleri durum-duyars?z olarak gerçekle?tirir.

‘q’ [En fazla bir adrese izin var] SED’den ç?kar.

‘d’ Örüntü alan?n? siler; yeni bir dönü? ba?lat?r.

‘n’ Otomatik yaz?m özelli?i aktifken örüntü alan?n? yazar ve girdiye yerle?tirir.

‘{komutlar}’ Bir grup komutu tek bir adres e?lemesiyle ba?lat?r.

‘y/kaynak-karakterler/ hedef-karakterler’ S komutu gibi çal???r; ama yaln?zca birkaç harf de?i?imi gerekti?inde kullan?l?r.

‘a /’

‘text’ [En fazla bir adrese izin var.] Metine ekleme yapar.

‘i’

‘text’ [En fazla bir adrese izin var.] Metni yazar(Sonunda " \ " olan sat?rlar? ç?kt?dan siler.)

‘c / ’

‘text’ Verilen adresteki sat?rlar? siler. Örüntü alan? silindikten sonra yeni bir dönü? ba?lat?r.

‘=’ Kullan?mda olan girdi sat?r? numaras?n? verir.

‘l’ örüntü alan?n? çapra??k bir formda yazar: yaz?lamayan karakterler (ve / ) C-tarz? kaç?? (C-style escaped) formunda yaz?l?r, uzun sat?rlar bölünür ve “\” i?aretiyle bölük olduklar? gösterilir,her sat?r sonu “$” ile i?aretlenir.

‘r dosya ad?’ Ad? verilen dosyan?n içeri?ini okur. E?er okunma izni olmayan bir dosya bu komutla ça?r?l?rsa dosya bo? olarak alg?lan?r,hata verilmez.

‘w dosya ad?’ Ad? verilen dosyaya örüntü alan?n? yazar.

‘D’ Örüntü alan?ndaki metni siler.

‘N’ Örüntü alan?na yeni bir sat?r ekler ard?ndan girdideki yeni sat?r? bu alana ilave eder.

‘P’ Örüntü alan?n?n ilk sat?r?n? yazar.

‘h’ Tutma alan?n?n içeri?ini örüntü alan?n? içeri?iyle de?i?tirir.

‘H’ Tutma alan?na yeni sat?r ekler ard?ndan örüntü alan?n?n içeri?ini bu alana ilave eder.

‘g’ Örüntü alan?n?n içeri?ini tutma alan? içeri?iyle de?i?tirir.

‘G’ Örüntü alan?na yeni sat?r ekler ard?ndan tutma alan?n içeri?ini ilave eder.

‘x’ Tutma ve örüntü alan? içeriklerini de?i?tirir.

‘: label’ [Adrese izin yok.] b ve t komutlar? için bir etiket belirler.

‘b label’ Etiketler ko?ulsuz dallan?r.

‘t label’ Etiketler, yerle?tirme ba?ar?l?ysa dallan?r.

   6.7 Basit Sed Örnekleri

/ ./!b  e?er bo? sat?rsa bir sonrakini okur.

s/!/!!/g  tüm “!” ler “!!” ile yer de?i?tirir.

s/^/!/g  sat?r ba??na ! ekler.

s/$/!/g  sat?r sonuna ! ekler.


7. Regex'in Sed Uygulamas?

 

  • Örnek 1: Ayn? anda birden fazla e?leme -e
]$ cat ornek1.txt
redhat üstünde
kde pencere yöneticisi
]$ sed -e 's/redhat/suse/g' -e 's/kde/gnome/g' ornek1.txt
suse üstünde
gnome pencere yöneticisi

  • Örnek 2: x,y ya da z ile ba?lay?p 0-9 aras? rakamla ve LNX ile devam eden ve sonunda bir yada daha fazla X içeren ifadeleri de?i?tirir. (x124LNXX gibi)

    s/[xyz][0-9]*LNX\+ 

 

  • Örnek 3: Dosyan?n içerisinde yap?lan de?i?iklik boru i?lemiyle yeni bir dosyaya kaydedilir.Regexp ve yerle?tirilen içinde “/” karakteri oldu?undan “/” ba??na “\” karakterleri getirilmi?tir.

s/ \/usr\/bin/\/bin/g dosya > yeni_dosya

  • Örnek 4:
]$ cat ornek4.txt
017 naciye uzun
]$ sed 's/\( [A-Za-z] [A-Za-z]* \) \( [A-Za-z] [A-Za-z]*\) \( [0-9]*\) / /' deneme_dosya
uzun 017 naciye
 
  • Örnek 5: Bazen tüm dosyada de?il sadece belli sat?rlar aras? i?lem yapmam?z gerekebilir. Bunu s i?lemcisinden hemen önce adresleme yaparak gerçekle?tirebiliriz. Örne?in a?a??daki örnekte arama sadece 5. ve 15. sat?rlar aras?nda yap?l?r.

sed '5,15s/bonito chica/guapo chico/g' 

 

  • Örnek 6: A?a??daki ifade sayesinde, dosya isimli dosya içerisindeki 'regex' ile ba?layan sat?rlardaki 'regular expression' kelimelerini 'düzenli ifadeler' olarak de?i?tirilebilir.

sed '/^regex/s/regular expression/düzenli ifadeler/g' dosya_ad? 

  • Örnek 7: Elimizdeki bir cd içinde bulunan mp3 dosyalar?n? listeletmek istedi?imizi varsayal?m. Bunun için find komutunu kullanabiliriz.
]$ find /mnt/cdrom -name *.mp3
/mnt/cdrom/duman/1.mp3
/mnt/cdrom/duman/2.mp3
E?er biz sadece mp3 dosyalar?n? görüntületmek isteseydik yani bulundu?u dizini göstermeksizin listeletmek isteseydik a?a??daki komutu kullanmal?yd?k.
]$ find /mnt/cdrom  -name *.mp3 | sed 's/.*\///g'
1.mp3
2.mp3

Bu komutla find komutuyla ortaya ç?kan veriler boru i?lemi ile sed uygulamas?n?n girdisi olarak kullan?lm??t?r. Sed '/' karakterini ve de ondan önceki karakteri yok ederek ç?kt?y? vermi?tir. \ karakteri normalde metakarakter olan / karakterini normal bir karakter yapmak için kullan?lm??t?r.

  • Örnek 8: Bu örnekte bir sat?r?n iki sat?ra nas?l bölündü?ü gösterilmi?tir.
]$ echo ikisatir | sed 's/iki/& yeni\>/'
iki yeni
satir
 
  • Örnek 9: cat ile içeri?ini görüntüledi?imiz a?a??daki gibi rasgele bo?luklara sahip bir dosyadaki tüm bo?luklar? ',' ile de?i?tirmek istiyor olal?m:
]$ cat ornek9.txt
1  2      3   4 5                 6  7
8            9   2                  3    elma
]$ sed 's/  */,/g' ornek1.txt
1,2,3,4,5,6,7
8,9,2,3,elma


  • Örnek 10: A?a??daki örnek için sed.scr ad?nda bir betik dosyas? haz?rlanm?? ve içeri?i gösterilmi?tir. Betik dosyas? sed program?n?n f parametresi yard?m? ile i?leme sokulmu?tur. Bu betik ornek10.txt içerisindeki her sat?r? tersten yazmaktad?r.
]$ cat ornek10.txt
necati demir
naciye uzun
]$ cat sed.scr
s/^/!/
s/\(.*\)\(.\)//
:a
s/\(.*\)!\(.*\)\(.\)/!/
ta
s/!//
]$ sed -f sed.scr ornek10.txt
rimed itacen
nuzu eyican

  • Örnek 11: ornek11.txt dosyas? içerisinde birbirinden virgül ya da sat?r sonu karakteri ile ayr?lm?? olan tüm say?lar? ayr? sat?rlarda göstermek için:
]$ cat ornek11.txt
100,210,354,462
331,746,50
90,263,47,14
]$ cat sed11.sed
:a
s/\([0-9]*\),\(.*\)/\
/
ta
]$ sed -f sed11.sed ornek11.txt
100
210
354
462
331
746
50
90
263
47
14
 
  • Örnek 12: A?a??daki örnek esnek olmamakla beraber i?levsel ve e?iticidir :)
]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:08:A1:2C:2D:29
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:168 (168.0 b)
          Interrupt:10 Base address:0xd800

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1007 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1007 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:61606 (60.1 Kb)  TX bytes:61606 (60.1 Kb)

]$ ifconfig|sed '1,16s/  *inet addr:\([0-9]\{1,3\}\).\([0-9]\{1,3\}\).\([0-9]\{1,3\}\).\([0-9]\{1,3\}\) .*/.../'|sed '1s/.*/eth0/'|sed '3,9s/.*//'|sed '10s/.*/lo/'|sed '12,16s/.*//'
eth0
192.168.0.1

lo
127.0.0.1
 
  • Örneklere ?li?kin: Bize daha kaliteli ve kullan??l? örnekleri belgemizde bulundurmam?z için yard?m edebilirsiniz. Örnek tavsiyelerinizi ya da sorular?n?z?, yukar?da belirtti?imiz e-posta adreslerine atmaktan lütfen çekinmeyiniz.

9. Kaynaklar

Mastering Regular Expressions by Jeffrey E.F. Friedl
http://sitescooper.org/tao_regexps.htm
http://www.opengroup.org



Kaynak cekirdek.uludag.org.tr/~meren/belgeler/regex/regex.htmlwww.javascriptkit.com/jsref/regexp.shtml, activez.cu.edu.tr/content/cyberspace/aspplus/installaspx.aspx
Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...