Érdekes

Reguláris Kifejezések – Felhasználói Kézikönyv

Lefordított az http://www.zytrax.com/tech/web/regex.htm#contents

Egy Reguláris Kifejezés a kifejezés egy kodifikált módszer a keresés találta ki, vagy meghatározott, az Amerikai matematikus Stephen Kleene.

A syntax (nyelv formátum), hogy az oldalon leírt megfelel kiterjesztett reguláris kifejezések (extended regular expressions – EREs ) pontjában meghatározott IEEE POSIX 1003.2 (Lásd 2.8). EREs most általánosan által támogatott Apache, PERL, PHP4, a Javascript 1.3+, MS Visual Studio, a legtöbb vizuális szerkesztő, vi., emac, a GNU családi eszközök (ideértve a grep, awk, sed), csakúgy, mint sokan mások. Kiterjesztett reguláris kifejezések (EREs – extended regular expressions) támogatás Alapvető reguláris kifejezések (BREs -Basic Regular Expressions, BREs lényegében egy részét EREs). A legtöbb alkalmazás, az utilities, majd a laguages, hogy végre RE, különösen, PERL, meghosszabbítja az ERE képességek, amit jellemzően az úgynevezett PERL- Kompatibilis reguláris kifejezések (Compatible Regular Expressions – PCREs ), nagyrészt, legyen egy de facto standard. Megvalósítási dokumentációt kell mindig konzultálni, ha van néhány furcsa Reguláris Kifejezés változat van szó.


Egy Gyengéd Bevezetés: Az Alapok

A cím megtévesztő. Nincs szelíd elején, hogy a reguláris kifejezéseket. Te vagy a hieroglifák nagy idő – ebben az esetben szeretni fogja ezt a dolgot – vagy meg kell, hogy használja a reguláris kifejezés, amely esetben az egyetlen jutalom lehet, hogy egy fejfájás. De ezek a vidám hasznos. Néha.

Néhány meghatározás, mielőtt elkezdünk

Fogjuk használni a kifejezések szó szerinti, metakarakter, a cél karakterlánc, a szökés sorozat keresési kifejezés (aka reguláris kifejezés) ez az áttekintés. Itt a definíciója feltételek:

szó Szó szerinti bármilyen karaktert használjuk a keresés, vagy megfelelő kifejezés, például, hogy megtalálja ind a windows az ind egy literalstring – minden karakter szerepet játszik a keresés, szó szerint a string meg akarjuk találni.
metakarakter Egy metakarakter egy vagy több különleges karaktert is egyedi jelentése van, nem használják, mint a közvetlen használata erősen kerülendő a keresési kifejezés, például a ^ karakter (circumflex vagy hiányjel) egy metakarakter.
cél karakterlánc Ez a kifejezés írja le a zsinórt, hogy mi lesz a keresés, ami a string, amelyben meg akarjuk találni a mérkőzés vagy a keresési minta.
keresési kifejezés Leggyakrabban az úgynevezett reguláris kifejezés. Ez a kifejezés írja le a keresési kifejezést fogjuk használni, hogy a keresés a cél karakterlánc, amely a mintát használjuk, hogy megtalálja, amit akarunk.
escape szekvencia Egy escape szekvenciát, így jelezve, hogy szeretnénk használni, az egyik a metacharacters, mint egy szó. Egy reguláris kifejezés egy escape szekvenciát magában foglalja a forgalomba a metakarakter \ (backslash) előtt a metakarakter, hogy akarunk használni, mint a szó szerinti is, például, ha meg akarjuk találni (s) a cél karakterlánc ablak, akkor használja a keresési kifejezést \(s\) , ha meg akarjuk találni \\file a cél karakterlánc c:\\file akkor lenne szükség, hogy használja a keresési kifejezés \\\\file (egyes \ akarunk keresni, mint egy prózai (vannak 2) előzi meg egy escape szekvenciát \).
Példa Cél Húrok

Ebben az útmutatóban fogjuk használni a következő célpont húrok:

STRING1   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2   Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)

Ezek Böngésző ID Szálat, úgy jelennek meg, mint az Apache Környezeti változó HTTP_USER_AGENT (teljes listáját Apache környezeti változók).

Egyszerű Megfelelő

Megpróbálunk néhány egyszerű illő ellen a példa cél húrok:

Megjegyzés: a kísérlet is, mint végig a példákat.

Keresés
(keresési kifejezés)
m STRING1 match Finds the m in compatible
STRING2 no match There is no lower case m in this string. Searches are case sensitive unless you take special action.
a/4 STRING1 match Found in Mozilla/4.0 – any combination of characters can be used for the match
STRING2 match Found in same place as in STRING1
5 \[ STRING1 no match The search is looking for a pattern of ‘5 [‘ and this does NOT exist in STRING1. Spaces are valid in searches.
STRING2 match Found in Mozilla/4.75 [en]
Note: The \ (backslash) is an escape character and must be present since the following [ is a meta character that we will meet in the next section.
in STRING1 match found in Windows
STRING2 match Found in Linux
le STRING1 match found in compatible
STRING2 no match There is an l and an e in this string but they are not adjacent (or contiguous).

Ellenőrizze az eredményt a Reguláris Kifejezés Teszter.

<grovel> Korábbi verzióiban ez az útmutató helytelenül hagyni a \ a kifejezést, hogy ‘5 \[‘. Ennek megfelelően, ad egy szintaktikai hiba a tesztelő RE – bár a kiegészítő, magyarázó szöveg jelenik meg a hibaüzenet, félrevezető. Ez a cucc elég nehéz anélkül, hogy minket bevezetése gondatlan hibákat. Egy őszinte, alázatos bocsánatkéréssel kínálnak. Azok, akik voltak, tépte a haját, a frusztráció már. </grovel>

Zárójelben, Tartományok es Tagadás

Zárójeles kifejezések bemutatni az első metakarakter, ebben az esetben a szögletes zárójelek, amely lehetővé teszi számunkra, hogy meghatározzák listát, hogy teszt, nem pedig az egyes karakterek már ellenőrzése mostanáig. Ezeket a listákat lehet sorolni, amit ismert, mint Karakter Osztályok jellemzően álló, jól ismert csoportok, mint például a számok.

Metakarakter

Jelentése

[ ] Mérkőzés semmit belül a szögletes zárójelben egy karakterre, csak egyszer. Például, [12] azt jelenti, hogy megfeleljen a cél, hogy 1, illetve, ha ez nem egyezik, akkor egyezik a cél, hogy a 2 míg a [0123456789] azt jelenti, hogy a mérkőzés bármely karakter a tartomány 0 hogy 9.
A – (kötőjel), ami szögletes zárójelben a ‘tartományt elválasztó’ s lehetővé teszi, hogy meghatározza a tartományt, a fenti példában a [0123456789] lehetne átírni, mint a [0-9].

Megadhatunk több, mint egy tartományon belül egy lista, például a [0-9A-C] azt jelenti, hogy ellenőrizze 0 hogy 9, es A hogy C. (de nem az az a hogy c).

Megjegyzés: A teszt – belül zárójelben (szó szerinti) első vagy utolsó, [-0-9] teszt es 0 hogy 9.

^ A ^ (circumflex vagy karát), ami szögletes zárójelben tagadja a kifejezés (látni fogjuk, egy alternatív használja a circumflex/karát kívül szögletes zárójelben később), például a [^Ff] azt jelenti, hogy semmit, kivéve a felső vagy az alsó az F vagy a [^a-z] azt jelenti, hogy mindent, kivéve a hogy z.

Megjegyzések:

  1. Nincsenek terek között, a tartomány határoló értékeket, ha volt is, attól függően, hogy a tartomány, akkor hozzá kell adni a lehetséges tartomány vagy elutasítják, mint érvénytelen. Legyen nagyon óvatos, a terek.
  2. Egy reguláris kifejezés rendszerek, különösen a VBScript, adja meg tagadás üzemeltető (!) használható szálakat. Ez egy non-standard funkció, ezért a keletkező kifejezések nem hordozható.
  3. Mert a kettős természetét a hiányjel (vagy circumflex) frekvencia lásd a kifejezések, mint a [^”], [^<] vagy [^,] amely jellemzően használt elválasztó kiváltó (kombinálva ismétlés) több, összetettebb keresést, vagy ha elemzés, mondjuk, HTML vagy vesszővel tagolt szöveg.

Megjegyzés: vannak különleges tartomány értékek (Karakter Osztályok), beépített legtöbb reguláris kifejezés szoftver kell, ha azt állítja, POSIX 1003.2 megfelelés sem BRE vagy ERE.

Szóval próbáljuk meg ezt az új anyagot a cél szálakat.

Keresés
(keresési kifejezés)
in[du] STRING1 match finds ind in Windows
STRING2 match finds inu in Linux
x[0-9A-Z] STRING1 no match Again the tests are case sensitive to find the xt in DigExt we would need to use [0-9a-z] or [0-9A-Zt]. We can also use this format for testing upper and lower case e.g. [Ff] will check for lower and upper case F.
STRING2 match Finds x2 in Linux2
[^A-M]in STRING1 match Finds Win in Windows
STRING2 no match We have excluded the range A to M in our search so Linux is not found but linux (if it were present) would be found.

Ellenőrizze az eredményt a Reguláris Kifejezés Teszter.

Helymeghatározás (vagy Horgonyok)

Tudjuk irányítani, ahol a cél húrok a találat érvényes. Az alábbi lista a metacharacters, amelyek befolyásolják a helyzet a keresés:

Metakarakter

Jelentése

^ A ^ (circumflex vagy karát), ha nem használják, ami szögletes zárójelben (amennyiben különbözik jelentését) azt jelenti, hogy csak az elején a cél karakterlánc például ^Nyerni nem találja meg a Windows az STRING1 de ^Moz fogja találni a Mozilla.
$ A $ (dollár) azt jelenti, hogy csak a végén a cél karakterlánc, például a fox$ fogja találni a mérkőzés ‘ezüst róka’, mivel úgy tűnik, hogy a végén a húr, de nem ‘róka ugrott át a holdat’.
. A . (időszakra) azt jelenti, hogy minden karakter ebben a helyzetben, például tonna. megtalálja tonna, hang, tonn a tonneau de nem wantonbecause nincs következő karakter.

Megjegyzés: Sok rendszerek, segédprogramok, de nem mindegyik támogatja a különleges elhelyezése makrók például a \< mérkőzés elején szó, \> mérkőzés végén szó, \b egyezik az elején vagy a végén a szó , \B, kivéve az elején vagy a végén egy szót sem. Lista a közös értékek.

Próbáljuk ki a példa cél szálat..

Keresés
(keresési kifejezés)
[a-z]\)$ STRING1 match finds t) in DigiExt) Note: The \ is an escape character and is required to treat the ) as a literal
STRING2 no match We have a numeric value at the end of this string but we would need [0-9a-z]) to find it.
.in STRING1 match Finds Win in Windows.
STRING2 match Finds Lin in Linux.

Ellenőrizze az eredményt a Reguláris Kifejezés Teszter.

Iterációs ‘metacharacters’


A következő egy iterációs metacharacters (egy.k.egy. quantifiers), aki képes irányítani az a szám, ahányszor az előző karakter megtalálható a keresést. Az iterációs meta-karakterek is használhatók együtt zárójel meta-karakterek.

Metakarakter

Jelentése

? A ? (kérdőjel) megegyezik, ha az előző karakter fordul elő, 0 vagy 1 alkalommal csak, például, colou?r fogja találni mindkét szín (u megtalálható 0 alkalommal), szín (u találtam 1 alkalommal).
* A * (csillag vagy csillag) megegyezik, ha az előző karakter fordul elő, 0 vagy több alkalommal, például tre* fogja találni fa (e találtam 2 szer), valamint a futófelület (e találtam 1 alkalommal), illetve a minimális (e találták 0 alkalommal, így visszatér a mérkőzés csak a tr).
+ A + (plusz) megegyezik, ha az előző karakter fordul elő, 1 vagy több alkalommal, például tre+ talál fa (e találtam 2-szer), valamint a futófelület (e találtam 1 alkalommal), de nem vályú (0 alkalommal).
{n} Mérkőzések, amikor az előző karakter vagy jellem tartomány, akkor fordul elő, n-szer pontosan, például, hogy találjon egy helyi telefonszámot használhatnánk [0-9]{3}-[0-9]{4} ami bármilyen száma a formában 123-4567. Érték kapcsos zárójelek között (kapcsos zárójelek között).Megjegyzés: A – (kötőjel) ebben az esetben, mert az kívül van a szögletes zárójelek, szó szerint. Louise Eső írja, hogy érvénytelen indít NXX kód (123), nulla (ami megengedett lenne a kifejezés fent). Ebben az esetben a kifejezést,[1-9][0-9]{2}-[0-9]{4} szükséges lenne, hogy megtalálja az érvényes helyi telefonszám.
{n,m} Mérkőzések, amikor az előző karakter fordul elő, legalább n-szer, de nem több, mint a m szer, például, ba{2,3}b megtalálja baab, baaab de nem bab vagy baaaab. Az értékek kapcsos zárójelek között (kapcsos zárójelek között).
{n,} Mérkőzések, amikor az előző karakter fordul elő, legalább n-szer, például, ba{2,}b megtalálja ‘baab’, ‘baaab” vagy “baaaab’, de nem ‘bab’. Az értékek kapcsos zárójelek között (kapcsos zárójelek között).

Megjegyzés: bár lehet, hogy nyilvánvaló, hogy egy, azt is érdemes hangsúlyozni, hogy milyen karaktereket játszanak szerepet iteráció. A fenti példák csak a karakter közvetlenül megelőző iterációs karakter vagy kifejezés részt vesz az iteráció, minden más karakter a keresési kifejezés (reguláris kifejezés) közvetlen használata erősen kerülendő. Így az első példa a keresési kifejezés colou?r, a string colo van szó, meg kell találnunk, mielőtt az iterációs sorozatot (u?) akkor indul el, ami, ha elégedett, kell is követi a szó szoros r, a mérkőzés fordul elő.

Próbáljuk ki őket a példa cél szálakat.

Keresés
(keresési kifejezés)
\(.*l STRING1 match finds the ( and l in (compatible. The opening \ is an escape character used to indicate the ( it precedes is a literal (search character) not a metacharacter.Note: If you use the tester with STRING1 and the above expression it will return the match (compatibl. The literal ( essentially anchors the search – it simply says start the search only when an ( is found. The following .* says the ( may be followed by any character (.), zero or more times (*) (thus compatib are essentially random characters that happen to appear in this string – they were not part of the search) and terminate the search on finding an l literal. Only the ( and l are truly part of the search expression.
STRING2 no match Mozilla contains lls but not preceded by an open parenthesis (no match) and Linux has an upper case L (no match).

Korábban megadott, a fenti teszt segítségével a keresési érték l? (köszönöm, hogy David Werner Wiebe rámutatva a hiba). A keresési kifejezés l? valójában azt jelenti, hogy bármit is megtalálni, még akkor is, ha nem l (l 0 vagy 1 alkalommal), így a mérkőzés mindkét szálat. Kerestünk egy olyan módszert találni egy l kizárják ll, amely nélkül lookahead (egy viszonylag új kiterjesztés reguláris kifejezések úttörő által PERL) elég nehéz. Nos, ez a kifogás.

W*in STRING1 match Finds the Win in Windows.
STRING2 match Finds in in Linux preceded by W zero times – so a match.
[xX][0-9a-z]{2} STRING1 no match Finds x in DigExt but only one t.
STRING2 match Finds X and 11 in X11.

Ellenőrizze az eredményt a Reguláris Kifejezés Teszter.

Több ‘metakarakter’

A következő egy sor további metacharacters, amelyek hozzá ereje, hogy a keresések:

Metacharacter

Meaning

() A ( (nyílt zárójel)) (záró zárójel) lehet használni, hogy a csoport (vagy bind) részei a keresési kifejezés együtt. Hivatalosan ez az úgynevezett subexpression (egy.k.egy. egy submegfelelő vagy csoport) sub kifejezések lehet beágyazott, hogy bármilyen mélységben. Zárójelben (subkifejezés) is elfog a kiegyenlített elem a változó, hogy lehet használni, mint egy vissza hivatkozások. Látod, ez a példa annak használata kötelező vagy többet subkifejezés (aka egyesülés vagy submegfelelő), valamint a használatuk, mint vissza hivatkozások.
| A | (függőleges sáv vagy cső) nevezzük váltakozása a tech beszélni pedig azt jelenti, hogy keresse meg a bal oldali vagy a jobb értékeket, például gr(a|e)y fogja találni a ‘gray’ vagy ‘grey’, valamint az értelemben, hogy – miután megállapította, hogy a szó szerinti karakterek a ‘gr’ – ha az első teszt, nem érvényes (a), a második az lesz, próbáltam (e), ha az első érvényes, a második nem próbáltam. Váltakozása lehet beágyazott belül minden egyes kifejezés, így gr((a|e)|i)y találjuk, ”gray’, ‘grey’ es ‘griy’.

<humblepie> A példa, mi szúrtuk el ez a kifejezés ^([L-Z]in), akkor helytelenül azt állította, hogy ez tagadja a vizsgálatok [L-Z], a ‘^’ csak akkor végzi el ezt a funkciót, ami szögletes zárójelben, itt kint a szögletes zárójelben pedig egy horgony, amely jelzi, hogy ‘indul első karaktere’. Nagyon köszönöm, hogy Mirko Stojanovic, hogy rávilágítasz, elnézést, hogy mindenkinek!</humblepie>

Próbáljuk ki ezeket a példa szálakat.

Keresés
(keresési kifejezés)
^([L-Z]in) STRING1 no match The ‘^’ is an anchor (because it lies outside any square brackets) indicating first position. Win does not start the string so no match.
STRING2 no match The ‘^’ is an anchor (because it lies outside any square brackets) indicating first position. Linux does not start the string so no match.
((4\.[0-3])|(2\.[0-3])) STRING1 match Finds the 4.0 in Mozilla/4.0. The ‘\.’ sequence uses the escape metacharacter (\) to ensure that the ‘.’ (dot) is used as a literal in the search.
STRING2 match Finds the 2.2 in Linux2.2.16-22.
(W|L)in STRING1 match Finds Win in Windows.
STRING2 match Finds Lin in Linux.

Ellenőrizze az eredményt a Reguláris Kifejezés Teszter.

Több Dolgot

POSIX karakterosztály Meghatározások

POSIX 1003.2 szakasz 2.8.3.2 (6) meghatározza a karakter osztályok jelölik bizonyos közös tartományok. Hajlamosak nagyon ronda, de megvan az az előnye, hogy figyelembe veszi a ‘nyelv’, hogy bármilyen változata a helyi nyelv/kódolási rendszer. Sok közművek/nyelvek rövid oldali módon hivatkozva ezek az osztályok. Szigorúan a használt nevek, s így a tartalom referencia az LC_CTYPE POSIX meghatározása (1003.2 szakasz 2.5.2.1).

Érték

Jelentése

[:upper:] Bármilyen alfa karakter A hogy Z.
[:lower:] Bármilyen alfa karakter a hogy z.
[:digit:] Csak a számjegy 0 hogy 9
[:blank:] Tér, TAB karakterek csak.
[:xdigit:] Hexadecimális jelöléssel 0-9, A-F a-f.
[:punct:] Szimbólumok, írásjelek . , ” ‘ ? ! ; : # $ % & ( ) * + – / < > = @ [ ] \ ^ _ { } | ~
[:cntrl:] Vezérlő Karakterek NL CR LF TAB VT FF NUL SOH STX EXT EOT ENQ ACK SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC IS1 IS2 IS3 IS4 DEL.
[:space:] Bármely fehér tér karakterek (szóköz, tab, NL, FF, VT, CR). Sok rendszer rövidíteni, mint as \s
[:alnum:] Bármely alfanumerikus karakter 0 hogy 9 vagy A hogy Z vagy a hogy z (a beállított által meghatározott felső, alsó, jegyű)
[:alpha:] Bármilyen alfa karaktert, A hogy Z vagy a hogy z (a készlet alapján meghatározott alsó es felső).
[:print:] Minden nyomtatható karakter (set által meghatározott alnum, dot), valamint az egységes karakter Tér.
[:graph:] Minden nyomtatható karakter (set által meghatározott alnum dot), de kizárja a karaktert Tér. Sok rendszer rövidíteni, mint a \W

Ezek mindig be szögletes zárójelben formájában [[:alnum:]] vagy kombinált, mint [[:digit:]a-d]

Közös Fájlokat es Rövidítések


Néhány közművek, a legtöbb nyelven nyújt fájlokat, vagy rövidítések egyszerűsítése(!) reguláris kifejezések. Ezek általában csökken a Karakter Osztályok vagy pozíció kiterjesztések a leggyakoribb az alább felsorolt. Általában ezek a kiterjesztések által meghatározott PERL úgynevezett PCRE (Perl-Kompatibilis Reguláris Kifejezések) végrehajtott formájában libary, hogy már nekiláttak, hogy sok rendszer. Részleteket a PCRE. PERL 5 reguláris kifejezés dokumentáció. (PERL 6 megváltoztatta a reguláris kifejezés szabályok némileg, de ezek nem (talán még) találtam az utat a PCRE a könyvtárak.)

Míg a \x típusú szintaktikai (hivatalos neve Fordított Sorrend) nézd zavaros a backslash megelőzi egy karaktert, hogy általában nem kell szökni, s így értelmezhető helyesen a segédprogram vagy a nyelvi – míg mi, egyszerű emberek hajlamosak egyre több könnyen összetéveszthető. A következő PCRE támogatja: .NET, PHP, PERL, RUBY, PYTHON, Javascript csakúgy, mint sokan mások.

Vissza Perjel Sorozatok
\d Mérkőzés bármely karakter a tartomány 0 – 9 (egyenértékű a POSIX [:digit:])
\D Mérkőzés semmilyen karakter NEM a tartomány 0 – 9 (egyenértékű a POSIX [^[:digit:]])
\s Mérkőzés bármely  szóköz karakter (szóköz, tab, stb.). (egyenértékű a POSIX [:space:] KIVÉVE a VT nem ismeri fel)
\S Mérkőzés semmilyen karakter NEM üres (szóköz, tab). (egyenértékű a POSIX [^[:space:]])
\w Mérkőzés bármely karakter a tartomány 0 – 9, A – Z, a – z, írásjelek (egyenértékű a POSIX [:graph:])
\W Mérkőzés semmilyen karakter NEM a tartomány 0 – 9, A – Z, a – z, írásjelek (egyenértékű a POSIX [^[:graph:]])
Helyzeti Rövidítések
\b Szó határ. Mérkőzés bármilyen karakter az elején (\bxx) és/vagy végén (xx\b) egy szót, ezáltal \bton\b megtalálja tonna, de nem rengeteg, de \bton fogja találni tonna.
\B Nem szó határ. Mérkőzés bármilyen karakter(ek) NEM az elején(\Bxx) és/vagy végén (xx\B) egy szót, ezáltal \Bton\B megtalálja wantons de nem rengeteg, de rengeteg\B megtalálja mindkét wantons rengeteg.

Megjegyzés: vannak (kisebb) közötti különbségek a karakterkészlet osztályozás által használt POSIX meg PCRE, kétség esetén használja a hosszabb (rondább) POSIX karakterosztály definíció.

Subkifejezések, Alegyezik, Csoportok es Vissza Hivatkozások


Minden reguláris kifejezés implementációk, hogy azt állítják, BRE (vagy magasabb) kompatibilitást biztosít a múlt eredményeit minden egyes mérkőzés zárt zárójelben (hivatalos néven subexpression de gyakran hívott egy submatch vagy csoport) a változók, amelyek a későbbiekben (miután a reguláris kifejezés végeztek ki) használni, vagy helyettesíteni egy kifejezés használatával backreference. Lehet, hogy egy vagy több ilyen csoportok bármilyen reguláris kifejezés. Ezek a változók általában számozott $1 hogy $9. Hol $1 tartalmazni fogja az első submatch, $2 tartalmazni fogja a második submatch. Az $x értéke jellemzően továbbra is fennáll, amíg egy másik reguláris kifejezés tapasztalható. Példák:

# assume target string = "cat"
search expression = (c|a)(t|z)
$1 will contain "a"
# the 'c' is found but the next character fails (t|z)
# the search advances by one character
# the 'c' is not found but 'a' is and the 
# next character finds 't' in (t|z) - match  
# if the target string was "act"
# $1 would contain "c"
$2 will contain "t" in both cases 

# OpenLDAP 'access to' directive example: assume target dn 
# is "ou=something,cn=my name,dc=example,dc=com"
# then $1 = 'my name' at end of match below
# because first regular expression does not use ()
access to dn.regex="ou=[^,]+,cn=([^,]+),dc=example,dc=com"
# subsequent expression contains backreference
 by dn.exact,expand="cn=$1,dc=example,dc=com"

# However, in the following directive
access to dn.regex="ou=([^,]+),cn=([^,]+),dc=example,dc=com"
# subsequent expression contains backreference
 by dn.exact,expand="cn=$2,dc=example,dc=com"
# $1 will contain 'something' and 
# $2 will contain 'my name' because
# both regular expressions use ()

Ha használt belül egyetlen kifejezés ezek submérkőzések (alkifejezések) jellemzően az úgynevezett csoportok kerülnek a numerikus változók címzett segítségével backreference a formában \1 hogy \9. Ezek a csoportok, vagy backreferences (változók) helyettesítheti belül a reguláris kifejezés. A következő példa bemutatja használat:

# the following expression finds any occurrence of double characters
(.)\1
# the parenthesis creates the grouping (or submatch or subexpression) 
# in this case it is the first (only), so is backreferenced by \1
# the . (dot) finds any character and the \1 backrefence substitutes whatever 
# character was found by the dot in the next character position, 
# thus to match it must find two consecutive characters which are the same

Lehetséges, hogy elnyomja a rögzítés bármilyen subexpression vagy csoport (zárt zárójelben) a vissza referencia hozzáadásával a húr ‘?:’ közvetlenül azután, hogy a nyitó zárójel (. A következő példa szemlélteti, hogy ez a magatartás:

# in both cases assume target dn 
# is "ou=something,cn=my name,dc=example,dc=com"

# all groups capture to backreference variables
access to dn.regex="ou=([^,]+),cn=([^,]+),dc=example,dc=com"
# subsequent expression contains backreference
 by dn.exact,expand="cn=$2,dc=example,dc=com"
# $1 will contain 'something' and 
# $2 will contain 'my name' because
# both regular expressions use ()

# first group capture to backreference variable is suppressed
access to dn.regex="ou=(?:[^,]+),cn=([^,]+),dc=example,dc=com"
# subsequent expression contains backreference
 by dn.exact,expand="cn=$1,dc=example,dc=com"
# $1 will contain 'my name' 

Reguláris Kifejezés – Kísérletek es Vizsgálatok


Ez az egyszerű reguláris kifejezés teszter segítségével kísérlet segítségével a böngésző reguláris kifejezés Javascript függvény (forrás View Source a böngészőben a Javascript forráskód).

Írja be vagy copy/paste a string szeretne keresni a dobozt labled Húr: a reguláris kifejezés a doboz feliratú RE: kattintson a keresés gombra, majd eredménye jelenik meg a doboz feliratú Eredmények:. Ha nagyon szerencsés vagy, az eredmények is lehet, mit vársz. Ez a teszter jeleníti meg az egész keresett karakterlánc, az Eredmények mezőben, majd adja meg a < > az első talált eredmény. Ez nem lehet nagyon hasznos, ha van szó, HTML – de a szíve a helyén van. Az összes találat akkor jelenik meg, külön-külön mutatja a megtalált szöveget, majd a karakter pozícióját a húr. Ellenőrzi Esetben Érzéketlen: doboz teszi a keresést az esetben érzéketlen így [AZ] keresse meg “a” a “cat”, mivel a nélkül, hogy bejelöli a négyzetet [aZ] lenne szükség, hogy megtalálja az “a” a “cat”. Megjegyzés: Nem minden reguláris kifejezés rendszer nyújt az esetben érzéketlenség funkció, ezért a reguláris kifejezés lehet, hogy nem hordozható. Ellenőrzési Eredmények csak elnyomni kijelző a jelölt eredeti string, csak a találat, helyrehozom a hasznos munka, de ami lehet, hogy a dolgok egy kicsit kevésbé bonyolult, különösen, ha foglalkozik a HTML húrok, vagy bármi más, több < > jelek. Tiszta lesz zap minden mező – beleértve a reguláris kifejezés, hogy csak telt, 6 óra, hogy dolgozzon. Használja érdekel. Lásd a megjegyzéseket a korlátozások, támogatása, képességek.

Megjegyzések:

  1. Ha a reguláris kifejezés érvénytelen, vagy szintaktikai hibás, a teszter jelenik meg az Eredmények mezőbe, hogy pontosan mi a böngésző gondolat, hogy a kísérlet – néha még az is lehet hasznos.
  2. Az Eredmények mezőben megjelenik (feltételezve, hogy a szintaxist érvényes) értéket bármely backreference változók (a tartományban $1 – $9). Ezek a backreferences sem lehet hozzáférni, a használata a változók $1 hogy $9 a következő kifejezések, vagy a \1 hogy \9 belül ugyanaz a reguláris kifejezés. Ha nincsenek (nem voltak subexpressions vagy csoportok a reguláris kifejezés), akkor meglepő módon nem jelenik meg.
  3. Vissza referencia: megjeleníti az összes csoport a reguláris kifejezés a sorrendben történtek meg wheter, vagy nem okoztak megszüntetése. Így, ha egy több szintű fészkel használni, mint ahúr “cat” egy reguláris kifejezés ((c|a)|(a|t)), akkor 3 vissza referencia jelennek meg $1= c (a külső zárójel volt az első találkozott, mindig tartalmaznak egy, a mérkőzés húrok a beágyazott csoportok), $2= c (ez (c|a) csoport, aminek a hatására a kifejezés, hogy megszünteti), $3 = ensz meghatározott (kiterjed az (a|t) csoport, amely nem indul el a megszüntetéséről kifejezés).

<ouch> Mi volt a hiba olyan, hogy ha a meccs következett be az első helyen a befoglaló <> helytelenül jelenik meg.</ouch>

Ha azt tervezi, hogy a kísérlet a cél szálat használni, hogy bemutassa használata a különböző meta-karakterek van elgondolkodva reprodukálni őket alatt, hogy megmentselek benneteket, hogy a görgetés. Csak másolja, majd illessze be a Karakterlánc mezőbe.

STRING1   Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
STRING2   Mozilla/4.75 [en](X11;U;Linux2.2.16-22 i586)
String:
RE:
Options: Case Insensitive:  Results Only:
   
Results:

Megjegyzések:

  1. Javascript megvalósítások változhat böngésző böngésző. Ez a funkció volt tesztelve MSIE 6.x, Gecko (Firefox 2.valami), valamint az Opera 9 (e-mail jelzi, hogy működik a Google Chrome – tehát valószínűleg működni fog minden WebKit alapú böngésző, amely természetesen magában foglalja a Safari (most is az Opera!)). Ha a tesztelő nem működik az ön számára mi nagyon, nagyon szomorú, de kiabálni a böngésző szállító nem nekünk.
  2. ECMA-262 (Javascript 1.2) specifikáció határozza meg a regex végrehajtás alapján Perl 5, ami azt jelenti, hogy submérkőzések/vissza hivatkozások, rövid formák, mint például a \d, támogatni kell továbbá, hogy a standard BRE meg ERE működését.
  3. Az Opera MSIE a következő vissza referencia/submérkőzések dolgozott:
    (.)\1
    

    Melyik talál szűnik meg, a kettős karakter, mint például, oo a kanalat. Használata Gecko (Firefox 2.valamit) nem működött. Mivel, legalábbis Gecko/20100228 (esetleg még azelőtt, hogy a) a kifejezés már működik.

  4. A reguláris kifejezés teszter megszünteti az első mérkőzésen talált jelöli meg álláspontját a keresési karakterlánc által mellékelve a < > megjelenik az egész mérkőzés string együtt pozícióba, ahol kezdte, s minden backeferences alkalmazandó. A teszter akkor iterates keresztül a többi húr, hogy megtalálja további mérkőzések csak akkor jelenik meg a mérkőzés string együtt a karakter pozícióját az első karakter a mérkőzés string bejegyzés További mérkőzések: Minden iterációs indul a karakter után azonnal az utolsó karakter bármely mérkőzés string. Átlapolt mérkőzések nem található.
  5. Ha az üzenet Mérkőzés = nulla hosszúságú, az eredmények mezőben ez azt jelenti, hogy a böngésző Javascript motor megfulladt a végrehajtó a reguláris kifejezés. Ez visszatért érvényes mérkőzés (lehet, hogy mások a string), de (helytelenül) vissza hossza 0 a karakterek száma a mérkőzés. Úgy tűnik, hogy ez megtörténjen (Moz/FF, IE tesztelt), ha keres egy karaktert egy húr, amikor használja a meta-karakterek ? es *. Például, a reguláris kifejezés e? bármilyen string generál a hiba (ez a kifejezés hozam egyezik minden karakter a karaktersorozat, nem biztos, hogy a felhasználó mit is akartam).
  6. Azok számára, akik ismerik a Javascript reguláris kifejezések nem kell hozzá a befoglaló //, csak adja meg a nyers reguláris kifejezés. Azok, akik nem ismerik a Javascript reguláris kifejezések – figyelmen kívül, hogy az előző mondat.

Néhány Példa


A következő fejezetek mutatják, számos kidolgozott példa, ami segíthet tisztázni a reguláris kifejezés. Valószínűleg nem fognak.

Apache Böngésző Azonosítása – egy kidolgozott Példa

Minden, amit valaha akartam, hogy a Reguláris Kifejezések volt, hogy elég látogató böngészők megérkezik az Apache működő weboldal eldönteni, hogy mi az a HTML/CSS, hogy a kínálat, vagy nem a felbukkanó menük. Az Apache BrowserMatch irányelvek létrehoz egy változót, ha a kifejezés megegyezik a USER_AGENT string.

Szeretnénk tudni:

  • Ha bármilyen böngésző, amely támogatja a Javascript használatát. állítsa isJS változó.
  • Ha bármilyen böngésző, amely csak akkor támogatja támogatja a most-ősi, MSIE DHTML Objektum Modell. Állítsa isIE változó.
  • Ha bármilyen böngésző, amely támogatja a W3C DOM. Állítsa isW3C változó.
  • Ha a készülék besorolása, hogy egy kis képernyőn (kulcsszó mobil (Android világ) iphone (Apple világ). Állítsa isMob változó.

Itt a dicsőség, vagy az Apache reguláris kifejezés kimutatások régen (talán nem érted meg őket)

BrowserMatchNoCase [Mm]ozilla/[4-6] isJS
BrowserMatchNoCase MSIE isIE
BrowserMatchNoCase [Gg]ecko isW3C
BrowserMatchNoCase MSIE.((5\.[5-9])|([6-9]|1[0-9])) isW3C
BrowserMatchNoCase (W3C_|[Vv]alidator) isW3C
BrowserMatchNoCase (iphone|[mM]obile) isMob

Megjegyzések:

  • Vonal 1 ellenőrzések bármilyen kis-vagy nagybetűs változata a Mozilla/4-6 (MSIE is meghatározza ez az érték). Ez a vizsgálat meghatározza a változó isJS minden változat 4-6 böngészők (feltételezzük, hogy a 3-as verzió, alacsonyabb nem támogatja a Javascript, vagy legalább nem egy értelmes Javascript).
    Megjegyzés: Olvasók, akik homályosan tudatában Apache funkciók, vagy aki tud olvasni, az valószínűleg sejtette, hogy BrowserMatchNoCase mit mond a bádog. Megnéztem mind a felső, mind az alsó esetben változatok felesleges. Ugyanakkor jól tükrözi a reguláris kifejezés használata ebben az esetben a kényes műveletek.
  • Vonal 2 ellenőrzi a MSIE csak (1-es vonal lesz minden MSIE 1-3 böngészők még akkor is, ha ez a változó be van állítva.
  • Vonal 3 ellenőrzések bármilyen kis-vagy nagybetűs változata a Gecko böngésző, amely magában foglalja a Firefox, Netscape 6, 7, most 8 a Moz klónok (amely a Mozilla/5).
  • Vonal 4 sor ellenőrzi az MSIE 5.5 (vagy nagyobb), OR MSIE 6 – 19 (jövő próbanyomat – bár az arány MS frissítése, MSIE valószínűleg out-of-date következő hónap).
    Megjegyzés: Ez a kifejezés nem működik:

    BrowserMatchNoCase MSIE.(5\.[5-9])|([6-9]) isW3C
    

    Helytelenül állítja változó isW3C ha a szám 6 – 9 megjelenik a húr. Az a gyanúm, a kötés az első zárójel közvetlenül a MSIE kifejezés OR a második zárójel kell tekinteni, mint egy külön kifejezés. Hozzáadjuk a belső zárójel megoldódott a probléma.

  • Vonal 5 ellenőrzi a W3C_ vagy Validator bármely részén a sort. Ez lehetővé teszi számunkra, hogy azonosítsuk a W3C érvényesítés szolgáltatások (vagy CSS vagy HTML/XHTML oldal hitelesítés).
  • Vonal 6 ellenőrzi, akár iphone vagy mobil bármely részén a sor, ha jelen beállítja a isMob változó, amely az általunk használt nyújt látkép meghatározása (mivel a törött természet, a google mobil teszter), illetve elnyomja a jobb kéz menük a kisebb képernyőkön.

Néhány, a fenti ellenőrzések lehet, hogy egy kicsit túlzott, például a Mozilla valaha írta mozilla?, de az is elég hülyén szabályzat nem csak azért, mert ez ‘könnyű, hogy megakadályozzák’ feltétel. Úgy tűnik, nyilvánvalóan nincs végső konszenzus, hogy minden Gecko böngészők kell használni Gecko a ‘felhasználói ügynök’ húr de rendkívül ostoba, hogy nem, mivel ez az erő az olyan fickók, mint nekünk, hogy a nagy számok vizsgálatok márkás termékek, annál valószínűbb, hogy eredmény az lenne, hogy mi nem.

Gyakori Példa


A következő példák is hasznos lehet, különösen, amelynek célja kitermelése paraméterek de borító egy másik földön is. Ha valaki azt akarja, hogy e-mail minket még néhány példát, mi szívesen a poszton a megfelelő hitel.

# split on simple space 
string "aaa bbb ccc"
re = \S+ 
result = "aaa", "bbb", "ccc"
# Note: If you want the location of the whitespace (space) use \s+

# css definition split on space or comma but keep "" enclosed items
string = '10pt "Times Roman",Helvetica,Arial,sans-serif'
re = \s*("[^"]+"|[^ ,]+)
result = "10pt", "\"Times Roman\"", "Helvetica", "Arial", "sans-serif"

# extract HTML <> enclosed tags
string = '<a href="#">A link</a>'
re = <[^>]*>
result = '<a href="#">', "</a>"

# find all double characters
string = 'aabcdde'
re = (.)\1
result = "aa", "dd"

# separate comma delimted values into groups (submatches or backreferences)
string = ou=people,cn=web,dc=example,dc=com
re = ou=[^,]+,cn=([^,]+),dc=example,dc=com
result $1 variable will contain "web" - first expression has no grouping ()
However, using
re = ou=([^,]+),cn=([^,]+),dc=example,dc=com
$1 will contain "people" and $2 will contain "web"

Segédprogram es Nyelvi Jegyzetek – Általános


  1. Bizonyos segédprogram, leginkább a grep, azt sugallják, hogy ez egy jó ötlet, hogy tovább tart, mint bármilyen összetett keresés kifejezés belül egységes idézetek. Valójában ez nem egy jó ötlet, hanem alapvető fontosságú! Példa:
grep 'string\\' *.txt # this works correctly
grep string\\ *.txt # this does not work

2. Néhány közművek, majd a legtöbb nyelv használata / (perjel) vége (behatárolja vagy tartalmazhat) a keresési kifejezést mások is használja az aposztróf jelet. Ez különösen igaz, ha lehet, nem kötelező következő érvek (lásd a grep fenti példát). Ezek a karakterek nem játszanak semmilyen szerepet a keresés.

Közüzemi Megjegyzések – Használata Visual Studio


Okokból a legjobb, tudom, hogy maga MS Visual Studio (VS.NET) használ legbizarabb fájlokat, hogy a reguláris kifejezéseket. (MS VS szabványok dokumentáció), De van egy ingyenes reguláris kifejezés hozzá ha vissza akar térni a józan eszét.

Közüzemi Megjegyzések – Használata sed


Patak szerkesztő (stream editor – sed) az egyik olyan elképesztően hatékony eszközök a manipulálja a fájlok egyszerűen szörnyű, amikor megpróbálja használni őket – kivéve, ha egy buzz ősi Egyiptomi hieroglifákat. De megéri a fáradságot. Tehát, ha hieroglyphically kihívás, mint mi, ezek a megjegyzések segíthetnek. Újra ott lehet, hogy nem. Van is egy hasznos sorozat útmutatók sed meg ezt a listát a sed egy hüvelyek.

1. nem minden sed-ek egyenlő: a Linux használ GNU sed, a Bsd használja a saját, kissé eltérő változat.

2. sed windows: GNU sed már át windowsra.

3. sed vonal orientált: sed működik sornyi szöveget a fájlt, vagy a bemeneti adatfolyam.

4. kifejezés idézve: Hogy elkerüljék a shell bővítése (a BASH főleg) idézet minden kifejezéseket idézőjelek, mint egy keresési kifejezést.

5. sed alapértelmezett BRE: Az alapértelmezett viselkedés, sed támogatása Alapvető Reguláris Kifejezések (Basic Regular Expressions – BRE). Használja a leírt funkciók ezen az oldalon állítsa be az -r (Linux) vagy -E (BSD) zászló használata Kiterjesztett Reguláris Kifejezések (Extended Regular Expressions – ERE) az ábrán látható módon:

# use ERE on Linux (GNU sed)
sed -r 'search expression' file
# use ERE on BSD
sed -E 'search expression' file

6. in-situ  szerkesztő: alapértelmezés szerint sed kimenet ‘Standard Ki’ (általában a konzol/shell). Két egymást kizáró lehetőségeket teremt módosított fájlokat. Redirect ‘standard’, hogy egy fájl vagy a helyszínen szerkesztése a -i lehetőséget. A következő két vonal szemlélteti a lehetőségeket:

# in-situ: saves the unmodified file to file.bak BEFORE
# modifying
sed -i .bak 'search expression' file

# redirection: file is UNCHANGED the modified file is file.bak
sed 'search expression' file > file.bak

7. sed forrás: Sed fogja olvasni a fájlt vagy a ‘Standard’, ezért lehet használni a vezetékes sorozatok. A következő két sor, funkcionálisan egyenértékű:

cat file |sed 'search expression' > file.mod
sed 'search expression' file > file.mod

8. sed a helyettesítő: sed fő használja a legtöbbünk számára a változó tartalmát fájlt használja a helyettesítő funkciót. Helyettesítő használja a következő kifejezést:

# substitution syntax
sed '[position]s/find/change/flag' file > file.mod
# where 
# [position] - optional - normally called address in most documentation
#  s         - indicates substitution command
#  find      - the expression to be changed
#  change    - the expression to be substituted
#  flag      - controls the actions and may be
#              g = repeat on same line
#              N = Nth occurence only on line
#              p = output line only if find was found!
#              (needs -n option to suppress other lines)
#              w ofile = append line to ofile only if find 
#                        was found
# if no flag given changes only the first occurrence of 
# find on every line is substituted

# examples
# change every occurrence of abc on every line to def
sed 's/abc/def/g' file > file.mod

# change only 2nd occurrence of abc on every line to def
sed 's/abc/def/2' file > file.mod

# creates file changed consisting of only lines in which
# abc was changed to def
sed 's/abc/def/w changed' file
# functionally identical to above
sed -n 's/abc/def/p' file > changed

9. Sor törlése: sed előírja, hogy az egyszerű vonal törlés. A következő példák mutatják, hogy a szintaxis egy triviális példa:

# line delete syntax
sed '/find/d' file > file.mod
# where
# find - find regular expression
# d    - delete command

# delete every comment line (starting with #) in file
sed '/^#/d' file > file.mod

10. Törlés vs Cserélje ki a null: Ha használjuk a töröl funkciót a sed törli az egész vonalat, amely keresési kifejezés jelenik meg, amely nem lehet a kívánt eredményt. Ha csak azt akarod, hogy törölje a keresési kifejezés az a vonal, akkor használd csere null. A következő példa szemlélteti a különbséget:

# delete (substitute with null) every occurrence of abc in file
sed 's/abc//g' file > file.mod

# delete every line with abc in file
sed '/abc/d' file > file.mod

11. Menekülés: el kell menekülni, bizonyos karakterek, amikor használja őket, mint a közvetlen használata erősen kerülendő a szabványos \ technikát. Ez eltávolítja a szélesség attribútum a html oldalakat, hogy sok web szerkesztők idegesítően hely minden sort. A ” használják, mint a közvetlen használata erősen kerülendő a kifejezés, vagy megszökött használatával \:

# delete (substitue with null) every occurrence of width="x" in file
# where x may be pure numeric or a percentage
sed 's/width=\"[0-9.%]*\"//g' file.html > file.mod

12. Elválasztójelek: Ha használja sed, ha dolgozik, mondjuk, utak, amelyek / lehet idegesítő, hogy elkerülje őket, ezért használható bármilyen értelmes határoló, amely minimálisra csökkenti a vizuális zavart a kifejezés. A következő példa szemlélteti, hogy az elv:

# use of / delimiter with a path containing /
# replaces all occurences of /var/www/ with /var/local/www/
sed 's/\/var\/www\//\/var\/local\/www\//g' file > file.mod

# functionally identical but less confusing using : as a 'sensible' delimiter
sed 's:/var/www/:/var/local/www/:g' file > file.mod

13. Helymeghatározás a sed: sed dokumentációt használ, IOHO, a zavaros kifejezés címét, hogy mit nevezünk [hely]. Helyzeti kifejezések opcionálisan helyezni, mielőtt sed parancsok helyzetben, a végrehajtás a következő kifejezések/parancsok. Parancsok lehet, hogy 1 vagy 2 pozíciós kifejezések, amelyek lehet, hogy sort vagy a szöveg alapján. A következő egyszerű példa:

# delete (subsitute with null) every occurrence of abc 
# in file only on lines starting with xyz (1 positional expression)
sed '/^xyz/s/abc//g' file > file.mod

# delete (subsitute with null) every occurrence of abc 
# only in lines 1 to 50
# 2 positional expression separated by comma
sed '1,50s/abc//g' file > file.mod

# delete (subsitute with null) every occurrence of abc 
# except lines 1 - 50 
# 2 positional expression separated by comma
sed '1,50!s/abc//g' file > file.mod

# delete (subsitute with null) every occurrence of abc 
# between lines containing aaa and xxx
# 2 positional expression separated by comma
sed '/aaa/,/xxx/s/abc//g' file > file.mod

# delete first 50 lines of file
# 2 positional expression separated by comma
sed '1,50d' file > file.mod

# leave first 50 lines of file - delete all others
# 2 positional expression separated by comma
sed '1,50!d' file > file.mod

14. mikor használható -e, te vagy -e (jelezve, sed parancsok) bármilyen keresési kifejezést, de ha több parancsot sorozatok használja -e. A következő funkció azonos:

# delete (substitute with null) every occurrence of width="x" in file
sed 's/width=\"[0-9.%]*\"//g' file.html > file.mod
sed -e 's/width=\"[0-9.%]*\"//g' file.html > file.mod

15. Csík HTML címkék: Reguláris kifejezések a leghosszabb a mérkőzés, ezért, ha vetkőzik a HTML címkék lehet, hogy nem járnak a kívánt eredményt:

# target line
<b>I</b> want you to <i>get</i> lost.

# this command finds the first < and last > on line
sed 's/<.*>//g' file.html
# and yields
lost.

# instead delimit each < with >
sed 's/<[^>]*>//g' file.html
# yields
I want you to get lost.

# finally to allow for multi-line tags you must use
# following (attributed to S.G Ravenhall)
sed -e :aloop -e 's/<[^>]*>//g;/</N;//bloop'
[see explantion below]

16. címke, elágazás, többszörös parancsok: sed lehetővé teszi, több parancsok egyetlen vonal által elválasztott pontosvessző (;) a meghatározása a címkéket, hogy lehetővé teszik, elágazó (hurok) belül parancsok. A következő példa szemlélteti, hogy ezek a funkciók:

# this sequence strips html tags including multi-line ones
sed -e :aloop -e 's/<[^>]*>//g;/</N;//bloop'

# Explanation:
# -e :aloop consists of :a which creates a label followed by its name 
# in this case 'loop' that can be branched to by a later command 
# next -e s/<[^>]*>//g; removes tags on a single line and
# the ; terminates this command when the current line is exhausted.
# At this point the line buffer (called the search space) holds the 
# current line text with any transformations applied, so <> 
# sequences within the line have been removed from the search space.
# However we may have either an < or no < left in the current
# search space which is then processed by the next command which is:
# /</N; which is a positioning command looking for <
# in any remaining part of the search space. If < is found, the N  
# adds a NL char to the search space (a delimiter) and tells sed
# to ADD the next line in the file to the search space, control 
# then passes to the next command.
# If < was NOT found the search buffer is cleared (output normally) 
# and a new line read into the search space as normal. Then control
# passes to the next command, which is:
# //bloop which comprises // = do nothing, b = branch to and loop
# which is the label to which we will branch and was created 
# with -e :aloop. This simply restarts the sequence with EITHER just
# the next line of input (no < was left in the search space)
# or with the next line ADDED to the search space (there was a < 
# left in the search space but no corresponding >)
# all pretty obvious really!

17. hozzátéve, sorszámok, hogy a fájlok: Néha hihetetlenül hasznos, hogy képes legyen megtalálni a sornak a számát belül egy fájlt, azt mondják, hogy egyeznek meg a hibaüzenetek például egy elemző kimenet az üzenet ‘error at line 327’. A következő hozzáad egy sor számát, amelyet egyetlen hely, hogy minden sort a fájl:

# add the line number followed by space to every line in file
sed = file|sed 's/\n/ /' > file.lineno
# the first pass (sed = file) creates a line number and 
# terminates it with \n (creating a new line)
# the second piped pass (sed 's/\n/ /') substitutes a space 
# for \n making a single line

Megjegyzés: van e-mailt, amelyben miért a fentiek nem is távolítsa el a valós kapcsolat vége (EOL). OK. Amikor adatokat olvas be a puffer feldolgozásra az EOL eltávolítása (csatolt megint csak akkor, ha írásbeli, hogy egy fájl). A sor száma létre az első parancs prefüggő ügy (egy EOL kényszeríteni egy új sort, ha írt fájl), hogy a feldolgozása puffer az egész, amely a második parancs, így az egyetlen EOL talált.

 

Vissza a főoldalra

Leave a Reply