Reguláris kifejezések avagy regexp


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] = ” -re
pl.
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/yyyy
1/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/yyyy
01/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 lines
Regex 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
]*>(.*?)

will match the opening and closing pair of any HTML tag
<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)

Search for
^[ \t]+
Analyze this regular expression with RegexBuddy and replace with nothing to delete leading whitespace (spaces and tabs)

will match any IP address just fine, but will also match 999.999.999.999 as if it were a valid IP address
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

valid IP address
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

matches any email address
\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

matches a date in yyyy-mm-dd format from between 1900-01-01 and 2099-12-31, with a choice of four separators
(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])

will match 1999-01-01 but not 1999/01-01.
(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])

To match a date in mm/dd/yyyy format, rearrange the regular expression
(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d

For dd-mm-yyyy format, use
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d

If you have a file in which all lines are sorted (alphabetically or otherwise), you can easily delete (subsequent) duplicate lines.
do a search-and-replace searching for
^(.*)(\r?\n\1)+$
and replacing with \1

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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/

Kapcsolódó bejegyzések:
  • Korábban már volt egy reguláris kifejezésekkel kapcsolatos cikk ( Reguláris kifejezések avagy regexp ), most egy online tesztelő eszközt szeretnék hozzá ajánlani …

  • 3D-s szöveg elkészítése nem túl nehéz, de nagyon látványos. Ebben a tutorialban megtudhatod, hogyan készítsd el :)1.) Nyissunk egy új lapot 600×600 méretben …

  • Számos szempont alapján ellenőrizhetjük a felhasználók által megadott email cím valóságát, a legegyszerűbb módszerektől a legnehezebbekig. Én most a kettő között …

  • A speciális karakterek használata bizonyos esetekben fontos lehet. Számomra elsősorban a tananyagok készítésekor volt jelentősége. Ha például egy kódot szeretnék …

  • Ezzel a módszerrel egyszerűen és gyorsan tudunk látványos külsőt adni szövegünknek.1. Nyissunk egy 600×600 nagyságú képet. Töltsük ki a hátteret fekete s …

A cikket beküldte: Harder (http://blog.harder.hu)

8 hozzászólás

  1. ix says:

    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 ?

  2. Harder says:

    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:

    1
    
    /^.*(?=^.{6,}$)(?=.*[A-Z]{1,})(?=.*[a-z]{2,})(?=.*[0-9]{3,}).*$/

    Ha azt szeretnéd, hogy ne tartalmazzon pl. szóközt:

    1
    
    /...(?!.*\s).../
  3. etyike says:

    Két segítség még ide
    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
    http://rubular.com/

  4. petrob says:

    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,}).*/

  5. petrob says:

    Sorry. Helyesen:
    /(?=\b[A-Za-z0-9_]{6,16}\b)(?=\b(.*?[A-Z]){3,})(?=(.*?[_]\d){3,}).*/

  6. Mészáros Erik says:

    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}$

  7. petrob says:

    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

  8. Xeno says:

    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?

Szólj hozzá
a Reguláris kifejezések avagy regexp c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>