Szabályos kifejezések szintaxisa

A szabályos kifejezések alábbi leírása részben a Henry Spencer által készített REGEXP könyvtár dokumentációján alapul. A Sally ezt a könyvtárat használja a szabályos kifejezések illesztéséhez.

A szabályos kifejezések alapvető szintaxisa
  • '^' – a kifejezés elején a sor elejére illeszkedik (például a '^test' a sor elején álló összes 'test' szövegre illeszkedik)
  • '$' – a kifejezés végén a sor végére illeszkedik
  • '.' – egyetlen tetszőleges karakterre illeszkedik (például a 'do.' illeszkedik a 'dog', 'dot', 'doe' stb. szövegekre; a 'd..r' illeszkedik a 'door', 'deer' stb. szövegekre)
  • '*' – egy kifejezés után annak 0 vagy több előfordulására illeszkedik (például az 'ad*' illeszkedik az 'a', 'ad' és 'add' szövegekre, vagyis egy 'a' betűre, amelyet tetszőleges számú 'd' követ)
  • '+' – egy kifejezés után annak 1 vagy több előfordulására illeszkedik (például a 'do+' illeszkedik a 'do' és 'doo' szövegekre, vagyis egy 'd' betűre, amelyet legalább egy 'o' követ)
  • '?' – egy kifejezés után annak 0 vagy 1 előfordulására illeszkedik (például az 'add?' illeszkedik az 'ad' és 'add' szövegekre, vagyis az 'ad' szövegre, amelyet opcionálisan egy 'd' követ)
  • '|' – kifejezések között az első, a második stb. kifejezésre illeszkedik (például a 'red|blue|black' illeszkedik a 'red', 'blue' és 'black' szavakra, vagyis a felsorolt szavak bármelyikére)
  • '[ ]' – a szögletes zárójelben lévő karakterek az ott felsorolt karakterek egyikére illeszkednek, másra nem (például az 'a[dts]' illeszkedik az 'ad', 'at' és 'as' szövegekre, vagyis egy 'a' betűre, amelyet 'd', 't' vagy 's' követ)
  • '[^ ]' – a szögletes zárójelben lévő karakterek az ott nem szereplő karakterek egyikére illeszkednek, másra nem (például a '[^abc]' bármely karakterre illeszkedik az 'a', 'b' és 'c' kivételével)
  • '[-]' – karaktertartományt jelöl (például az '1[0-9]' minden számra illeszkedik '10' és '19' között)
  • '( )' – a zárójelben lévő kifejezéseket egyetlen kifejezéssé kapcsolja össze (például a '(very )*well' illeszkedik a 'well', 'very well' és 'very very well' szövegekre, vagyis tetszőleges számú 'very ' szövegre, amelyet 'well' követ)
  • '\' – bármely karakter előtt magára a karakterre illeszkedik (például a 'too\.' csak a 'too.' szövegre illeszkedik; a 'too.' viszont a 'tool', 'took' és 'toon' szövegekre is, vagyis a 'too' szövegre, amelyet tetszőleges karakter követ)
A szabályos kifejezések szintaxisa

A szabályos kifejezés nulla vagy több, '|' jellel elválasztott ágból áll. Mindenre illeszkedik, amire valamelyik ága illeszkedik.

Az ág nulla vagy több egymás után fűzött részből áll. Az első részre illeszkedik, amelyet a második követ, és így tovább.

A rész egy atom, amelyet esetleg '*', '+' vagy '?' követ. A '*'-gal követett atom az atom 0 vagy több illeszkedéséből álló sorozatra illeszkedik. A '+'-szal követett atom 1 vagy több illeszkedésből álló sorozatra illeszkedik. A '?'-lel követett atom az atom egyetlen illeszkedésére vagy az üres karaktersorra illeszkedik.

Az atom lehet zárójelbe tett szabályos kifejezés (arra illeszkedik, amire maga a szabályos kifejezés), tartomány (lásd alább), '.' (egyetlen tetszőleges karakterre illeszkedik), '^' (a sor eleji üres karaktersorra illeszkedik), '$' (a sor végi üres karaktersorra illeszkedik), egy '\' után álló karakter (magára a karakterre illeszkedik), vagy egyéb különleges jelentés nélküli karakter (magára a karakterre illeszkedik).

A tartomány '[]' közé zárt karaktersorozat. Alapesetben a sorozat bármely egyetlen karakterére illeszkedik. Ha a sorozat '^' jellel kezdődik, a sorozat többi részében nem szereplő bármely egyetlen karakterre illeszkedik. Ha a sorozat két karakterét '-' választja el, az a köztük lévő ASCII-karakterek teljes listájának rövidítése (például a '[0-9]' bármely tízes számrendszerbeli számjegyre illeszkedik). Szó szerinti ']' felvételéhez tegye első karakternek (az esetleges '^' után). Szó szerinti '-' felvételéhez tegye az első vagy utolsó helyre.

Többértelműség

Ha egy szabályos kifejezés a szöveg két különböző részére is illeszkedhetne, a korábban kezdődőre illeszkedik. Ha mindkettő ugyanott kezdődik, de eltérő hosszúságú, vagy azonos hosszúságra eltérő módon illeszkedik, a helyzet az alábbiak szerint bonyolultabb.

Általában az ágak listájának lehetőségeit balról jobbra vizsgálja; a '*', '+' és '?' lehetőségeit a leghosszabbal kezdve; az egymásba ágyazott szerkezeteket kívülről befelé; az egymás után fűzött szerkezeteket pedig a bal szélsővel kezdve. A kiválasztott illeszkedés az lesz, amelyik a legkorábbi lehetőséget használja.

Például az '(ab|a)b*c' kétféleképpen illeszkedhet az 'abc' szövegre. Az első választás az 'ab' és az 'a' között történik; mivel az 'ab' korábban szerepel, és sikeres teljes illeszkedést eredményez, ezt választja. Mivel a 'b' már foglalt, a 'b*'-nak az utolsó lehetőségére, az üres karaktersorra kell illeszkednie, hogy tiszteletben tartsa a korábbi választást.

Abban a speciális esetben, amikor nincs '|' és csak egyetlen '*', '+' vagy '?' szerepel, az eredmény a lehető leghosszabb illeszkedés lesz. Így az 'ab*' a 'xabbbby' szövegből az 'abbbb' részre illeszkedik. Ha azonban az 'ab*' mintát a 'xabyabbbz' szövegre alkalmazza, az 'x' utáni 'ab' részre illeszkedik a legkorábbi kezdés szabálya miatt.

From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository