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