A szabályos kifejezés (angolul regular expression) egy olyan, bizonyos szintaktikai szabályok szerint leírt string, amivel meghatározható stringek egy halmaza. Nevének rövidítésére gyakran a regexp vagy regex kifejezés használatos. A szabályos kifejezéseket sok szövegszerkesztő, illetve segédprogram használja, főleg szövegek keresésekor vagy szövegek bizonyos minták szerinti kezelésekor. A szabályos kifejezéseket a jelsorozatokkal, stringekkel való műveleteknél több programozási nyelv is használja, illetve támogatja. Például a Perl és a Tcl is rendelekezik direkt szabályos kifejezések elemzésére szolgáló szintaktikai elemzővel. A különböző Unix disztribúciókban lévő segédprogramok jelentős része (beleértve a sed szövegszerkesztőt és a grep szűrőt) támogatta először a szabályos kifejezések használatát.
Regular expression examples for decimals input
Positive Integers --- ^\d+$ Negative Integers --- ^-\d+$ Integer --- ^-{0,1}\d+$ Positive Number --- ^\d*\.{0,1}\d+$ Negative Number --- ^-\d*\.{0,1}\d+$ Positive Number or Negative Number - ^-{0,1}\d*\.{0,1}\d+$ Phone number --- ^\+?[\d\s]{3,}$ Phone with code --- ^\+?[\d\s]+\(?[\d\s]{10,}$ Year 1900-2099 --- ^(19|20)[\d]{2,2}$ Date (dd mm yyyy, d/m/yyyy, etc.) --- ^([1-9]|0[1-9]|[12][1-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$ IP v4 --- ^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$ #### Regular expression examples for Alphabetic input
Personal Name --- ^[\w\.\']{2,}([\s][\w\.\']{2,})+$ Username --- ^[\w\d\_\.]{4,}$ Password at least 6 symbols --- ^.{6,}$ Password or empty input --- ^.{6,}$|^$ email --- ^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$ domain --- ^([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$ #### Other regular expressions
Match no input --- ^$ Match blank input --- ^\s[\t]*$ Match New line --- [\r\n]|$ ~~~~~~~~~~~~~~~~ #### INI-khez
találat az összes sor eleje [valami] = " -repl. szoveg = " szoveg szoveg=" szoveg szoveg= " szoveg szoveg =" szoveg szoveg = "szoveg szoveg="szoveg szoveg= "szoveg szoveg ="szoveg elotag_utotag = " szoveg elotag_utotag = "szoveg elotag_utotag ="szoveg elotag_utotag=" szoveg elotag_utotag="szoveg ((^(.*)( = ))|(^(.*)(=))|(^(.*)(= ))|(^(.*)( =)))" Találat a sor végi idézőjelekre"$ Találat az összes INI comment sorra^;(.*) Találat azokra a sorokra, melyekben szögletes zárójelek között szerepel vmi (szekció nevek) [valami]^\[(.*)\] Üres sorok^\r?\n ~~~~~~~~~~~~~~~~ #### regexpbuddy
Date d/m/yy and dd/mm/yyyy1/1/00 through 31/12/99 and 01/01/1900 through 31/12/2099 Matches invalid dates such as February 31st Accepts dashes, spaces, forward slashes and dots as date separators \b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\b Date dd/mm/yyyy01/01/1900 through 31/12/2099 Matches invalid dates such as February 31st Accepts dashes, spaces, forward slashes and dots as date separators (0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2} Lines: Delete absolutely blank linesRegex match includes line break after the line. ^\r?\n ~~~~~~~~~~~~~~ http://www.regular-expressions.info/ mail address \b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b matches the opening and closing pair of a specific HTML tag ~~~~~~~~~~~~~~ #### Regexp:
A regexp a reguláris kifejezés (regular expressions) röviditése. Általában a UN*X gépeken találkozhatunk vele. A reguláris kifejezés karakterfüzérek (stringek) illesztésére használatos. Karaktersorozatok illeszkednek egymásra, ha azonos elemekből állnak. Ezért kereső programok esetében használatosak. Szabályok:- Egy egyedülálló karakter, amely nem újsor karakter, és nem a .*[\]^$ karakterek egyike, az önmagára illeszkedik. Ez magyarul azt jelenti, hogy ha például a keresendő minta - reguláris kifejezése - egy "a" betűt tartalmaz, akkor ez a vizsgált szövegben csakis egy darab "a" betűre fog illeszkedni. Hasonlóképpen az alma reguláris kifejezés csupa "rendes" karakterből áll, amelyek mindegyike önmagára illeszkedik csupán, s igy a fenti minta a vizsgált szövegben bárhol előforduló alma karakterláncra fog illeszkedni.
- A \c páros, ahol c egy látható karakter, a c karakterre illeszkedik a karakter literális értelmében. Tehát a \* illeszkedik a * -ra, a \\ pedig a \ -re.
- A . (pont) karakter egy olyan reguláris kifejezés, amely bármelyik (nem újsor) karakterre illeszkedik. Igy például a az ab. minta illeszkedik az aba, abb, abc, ... abz, ab0 stb. karaktersorozatokra.
- Ha e egy reguláris kifejezés, akkor e* egy olyan reguláris kifejezés, amely e reguláris kifejezés 0 vagy többszöri előfordulására illeszkedik. Igy az a* reguláris kifejezés ileszkedni fog az üres stringre is (hiszen abban az a karakter 0-szor szerepel), de az a, aa, aaa,... karakterláncokra is.
- A reguláris kifejezés teljes implementációjában szerepel a + jelölés is, ami a megelőző reguláris kifejezés 1 vagy többszöri előfordulására illeszkedik. Belátható, hogy ez helyettesithető az aa* reguláris kifejezéssel, ezért célszerű a szűkebb implementációt használni (hiszen az nagyobb valószinűséggel működik.)
- [..] a szögletes zárójelbe tett karaktersorozat illeszkedik az abban a pozicióban lévő bármely, a zárójelben felsorolt karakterre.
A karakterek felsorolására érvényes szabályok az alábbiak:- Kódjukat tekintve egymás után következő karaktereket röviditeni lehet a kötőjel használatával. Például [0-9a-z] jelenti az összes számjegyet, és az angol ábécé összes kisbetűjét. (A magyar írásjelek nem tartoznak a szabványos ASCII kódok közé, csak az ú.n. extended ASCII kódok közé.)
- A nyitó zárójelet követő ^ jel a felsorolt karakterek tagadása. Azaz [^0-9] illeszkedik bármely, nem számjegy karakterre.
- A ] zárójel csak a felsorolás első tagja lehet.
- A - karaktert a \- karakterpáros jelöli.
- Két egymás után irt reguláris kifejezés is reguláris kifejezés. Például a [^0-9][0-9] kifejezés egy nem szám karaktert követő számkarakterre illeszkedik.
- Két, egymástól | jellel vagy újsorral elválasztott reguláris kifejezés illeszkedik akár az egyik, akár a másik részkifejezésre. Így a [a-z]|\. kifejezés az adott pozicióban csak kisbetűt vagy pontot fogad el.
- A \(..\) tett reguláris kifejezés illeszkedik a zárójelbe tett kifejezésre, és egyben megjelöli azt.
- A ^ jel a sor elejére, a $ jel a sor végére illeszti a mintát. Például a ^*$ kifejezés az üres sorra illeszkedik, a ^[^0-9]*$ kifejezés pedig a számot nem tartalmazó sorra.
- A \n kifejezés, ahol n egy szám, a zárójelezéssel kijelölt mintára hivatkozik, mégpedig a kijelölés sorrendjében. Igy a ^\(.\)\(.\).*\2\1$ minta olyan sorokra illeszkedik, ahol a sor első két karaktere tükörszimmetrikus az utolsó két karakterre.
- Néhány szabály a minta előfordulásának számosságára utal. Az egykarakteres reguláris kifejezést követő \{m,n\} sorozat, ahol m és n 256-nál kisebb nemnegativ egész, azt jelenti, hogy a minta legalább m-szer, és legfeljebb n-szer fordul elő egymás után. Ha csak az n szám van a zárójelpároson belül, annak jelentése pontosan n előfordulás, ha csak az m, annak jelentése legalább m előfordulás.
További linkek
http://en.wikipedia.org/wiki/Regular_expression http://www.ilovejackdaniels.com/regular_expressions_cheat_sheet.png http://progkor.inf.elte.hu/regkif.htm http://hu.wikipedia.org/wiki/Szab%C3%A1lyos_kifejez%C3%A9s http://www.regular-expressions.info/
Harder
Profil
Korábbi hozzászólások (8)
A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.
Sziasztok !
Azt hogyan kell megcsinálni reguláris kifejezésként, hogy egy jelszó legyen minimum 6 karakter és szerepeljen benne legalább egy nagybetű, legalább kettő kisbetű és legalább három szám ?
Az egyik látogató - Nándor - kért meg, hogy tegyem egy hozzászólásba amit írt, mert nem tudta elküldeni:
Ha szükség van arra, hogy meg kell adni kötelezően karaktert (csoportot), akkor: (?=.*[nekem ez kell]).
Kérésedre szerintem a válasz:
/^.*(?=^.{6,}$)(?=.*[A-Z]{1,})(?=.*[a-z]{2,})(?=.*[0-9]{3,}).*$/
Ha azt szeretnéd, hogy ne tartalmazzon pl. szóközt:
/...(?!.*\s).../
Két segítség még ide
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
http://rubular.com/
A mohó csillag - .* - a szó végéig mindent kiválaszt, amire a megelőző karakter passzol, aztán a regex motor csak addig lépked vissza, amíg teljesíti a minimális feltételt. Ha többszörös előfordulást keresel, akkor a visszalépkedtetés helyett előre kell lépkedtetni , például, a csillagot (lazy quantifier).*?, és csoportba kell foglalni a keresett karakterrel, majd ezeket együtt ismételtetni a kívánt számban. (.*?[A-Z]){2,}
(?=.*[0-9]{3,}) Nem nyert, mert három EGYMÁS MELLETTI számot keres a végéről.
Megoldások jelszó ellenőrzésére:
a.) Legyen minimum 6, max 16 karakter hosszú - legyen benne legalább három nagybetű és két szám. Vigyázat: Bármilyen karaktert elfogad, tehát jó: * - ékezetes is!
Pl.: 1ceCil_34MonuS, vagy 1Láposi_34Lőrinc
/(?=\b[^\s]{6,16}\b)(?=\b(.*?[A-Z]){3,})(?=(.*?\d){2,}).*/
b.) Minimum hat,max 16 az angol abc-nek megfelelő karakter és az alulvonás - legyen benne három nagybetű, és két szám, úgy hogy a számok előtt mindig alulvonásnak kell lennie.
Pl.: ce_4Cil_2_3_MonuS
/(?=\b[a-zA-Z_]{6,19}\b)(?=\b(.*?[A-Z]){3,})(?=(.*?[_]\d){3,}).*/
Sorry. Helyesen:
/(?=\b[A-Za-z0-9_]{6,16}\b)(?=\b(.*?[A-Z]){3,})(?=(.*?[_]\d){3,}).*/
Ez a feladat, de nem tudom, hogyan álljak neki:
Írj le olyan négy karaktert, ami a következő reguláris kifejezési mintára illeszkedik:
^(19|20)[\d]{2,2}$
Szövegesen megfogalmazva a regex -et:
szöveg kezdet horgony amit literálisan (szó szerint) csak a 19 vagy a 20 karakterek követhetnek, majd két bármilyen decimális(szám) karakter zárja a sort és vége horgony.
Megjegyzés: tök felesleges karakter osztályba tenni [] a \d decimáslis jelet, mert pont ugyan azt jelenti anélkül is, és a {2,2} meg azt jelenti, hogy kétszer, és pontosan kétszer ismétlődjön, ami megint ugyan az, mint hogy kétszer ismétlődjön {2}.
normálisan: ^(19|20)\d{2}$
A legteljesebb, legjobb regexp tutorial site: http://www.regular-expressions.info/tutorial.html
Sziasztok! Olyat szeretnék csinálni, hogy egy jelszó mezőnél meg akarom szabni, hogy milyen karaktereket kelljen tartalmatnia: pl. minimum 1 nagybetű minimum 1 szám, minimum 1 kisbetű, és minimum egy különleges karakter(természetesen csak opyan karaktereket akarok megengedni, amik nem veszélyesek html,js,sql támadásra. Milyen regex-el oldható ez meg?
Van hozzáfűznivalód? Írj nekem közvetlenül.
Kapcsolat