Reguláris kifejezés értelmezése?
(b*ab*a)*b*
Kérdés, hogy ez milyen szavakat generál? És miért kell a zárójel?
Az "akárhány" szó itt azt fogja jelenteni, hogy nulla is lehet.
Akárhány "b" betű, majd egy "a", utána megint akárhány "b", és ismét egy "a". Mivel ez zárójelben van, így egy csoportot képez. Ebből a csoportból szintén akárhány db lehet. Majd legvégül még akárhány "b".
Akkor a kifejezés ezekre a szavakra illeszkedik rá, jól értem?
aa, aab, baa, baab, baba, babab, ...?
Ha unio van a zárójelben a szimbólumok között, akkor is ugyanez, csak hosszabban van leírva?
(b* U a U b* U a)* b*
Ő... nem.
Az "vagy"-ot jelent (tehát a felsoroltak közül az egyik) és általában | a jele.
Nah... Ez fordítva működik. Mindig az a kérdés, hogy a szöveg illeszkedik-e a mintára. Egy minta alapján, NAGYON sok szöveg létezhez. Persze vannak generátorok, de itt inkább a logikát kell megjegyezni.
Kifejezésünk: (b*ab*a)*b*
Alapvetően ha szövegünk "aaa", akkor csupán az "a" kifejezés 3x is ráilleszkedik bal-középső-jobb oldalira, mert nem határoztuk meg a kezdeti pozícióját. Erre a ^ (elejétől nézze) vagy a $ (végére illeszkedjen) használatos.
Példa:
abc - ^a(igaz); b(igaz, mert a "b" szerepel benne); ^b(hamis, mert a-val kezdődik); a$(hamis, mert c-vel végződik); ^abc$(igaz, mert faltól-falig ez szerepel)
De, akkor a * az mi? Azt mondja meg, hogy pl. ^ab*c$ esetében a * előtti karakter 0-tól végtelen előfordulás megengedett. Tehát illeszkedik: ac, abc, abbc, abbbbbbbbbc szavakra is.
Ha zárójel is van, akkor az egészre értendő. Pl.: ^(ab)*$ Azaz itt a csoport tekintendő egy "karakternek". Azaz illeszkedik az "" szövegre, mert a * megengedi a nem létezésüket, de az "a" vagy "b" karakterekre nem illeszkedik, mivel az "ab"-nek együtt kell szerepelnie, mivel egy zárójel csoportba foglalja őket. Tehát illeszkedik a: "", ab, abab, ababab, ... szavakra.
Tehát a te kifejezésedben ilyen jelzés nincs, tehát bárhol előfordulhat. Mivel a zárójel *-os meg a "b" is, így BÁRMILYEN szövegre illeszkedik. Még a "123123"-ra is. Ha szerepelne a ^$ jelek, ez nem lenne igaz, mert a számok nem lesznek megengedettek. Jó, de akkor szorítkozzunk a ^(b*ab*a)*b*$ -ra ^$ bónusszal.
- "" (igaz, mert (...)*b*)
- "a" (hamis, mert a után kell még egy "a" a zárójelben lévő definíció szerint)
- "aa"
- "baa", "aba", "baba" variációk a zárójel definíciója szerint
Fentieket (kivéve az "a"-t) bármilyen kombinációban egymás után teheted akárhányszor mert (..)*. Tehát pl. igaz lesz: "baaabababaaa"-ra is.
Mindezt egy b*-al fejeződik be, tehát 0-tól végtelen mennyiségben pakolhatsz a végére b karaktert, és nem feltétlen kell, hogy a ()* szerepeljen. Így igaz továbbiakban: "b", "baaabababaaa", "baaabababaaab", ""baaabababaaabbbbbbbbbbbbbbbbbbbbbbbbbbbb"-re is.
Persze felhívom a figyelmed, hogy a példádban nem volt ^$ szimbólumok. Így aszerint igaz lehet ezekre is:
- _!%=12451_
- baa_!%=12451_
- _!%=12451_baa
- _!%=12451_b_!%=12451_
Próbáld ki itt: [link]
Például ha a kiírt azt írom le, hogy
b*(b*ab*a)*b*
(teszek elé egy b*-ot), akkor a regex101-ben azt látom, hogy ugyanazokat a szavakat elfogadja mindkettő, tehát gondolom ekvivalensek. Ellenpéldát iszonyú nehéz találni.
hát b#zdmeg, b*b* nyilván ugyanaz, mint b*.
Hülyeséget ne csinálj...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!