Kezdőoldal » Számítástechnika » Programozás » Reguláris kifejezés értelmezése?

Reguláris kifejezés értelmezése?

Figyelt kérdés

(b*ab*a)*b*


Kérdés, hogy ez milyen szavakat generál? És miért kell a zárójel?



2022. nov. 1. 13:23
1 2
 1/16 Pelenkásfiú ***** válasza:
100%

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".

2022. nov. 1. 14:09
Hasznos számodra ez a válasz?
 2/16 anonim ***** válasza:
0%
Hát azért ez elég egyszerű.
2022. nov. 1. 14:45
Hasznos számodra ez a válasz?
 3/16 A kérdező kommentje:

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*

2022. nov. 1. 15:19
 4/16 Pelenkásfiú ***** válasza:

Ő... nem.

Az "vagy"-ot jelent (tehát a felsoroltak közül az egyik) és általában | a jele.

2022. nov. 1. 15:59
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:
0%
egyszerűen: a páros sok 'a'-t tartalmazó szavak
2022. nov. 1. 17:13
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:
72%

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]

2022. nov. 1. 17:51
Hasznos számodra ez a válasz?
 7/16 A kérdező kommentje:
Utolsó, köszönöm, de nekem inkább egy olyan oldal kellene, ami ekvivalenciát vizsgál. Az a bajom, hogy van megoldókulcsom, de magamtól más regexet írok fel. Ami lehet, hogy jó, mert ekvivalens a megoldókulcséval, de lehet, hogy nem, mert pl. hiányzik egy b* belőle és akkor ezt nem veszem észre. Van ilyen oldal, ahol megadok két regexet és megvizsgálja, hogy azonosak-e?
2022. nov. 2. 21:06
 8/16 A kérdező kommentje:

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.

2022. nov. 2. 21:08
 9/16 A kérdező kommentje:
*kiírt helyett
2022. nov. 2. 21:08
 10/16 anonim ***** válasza:

hát b#zdmeg, b*b* nyilván ugyanaz, mint b*.

Hülyeséget ne csinálj...

2022. nov. 2. 22:19
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!