Ošetření RE na poslední prvky v řetězci – Regulární výrazy – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ošetření RE na poslední prvky v řetězci – Regulární výrazy – Fórum – Programujte.comOšetření RE na poslední prvky v řetězci – Regulární výrazy – Fórum – Programujte.com

 

fix0
Stálý člen
12. 11. 2020   #1
-
0
-

Ahoj všem,

prosím o pomoc ošetřit, aby RE fungoval i v určitých případech.

Funkční případ:

  • Zadání: 1;2;3;4;5;6;7;8;9
  • Výraz: (;[^;]*){3}$
  • Výsledek: ;7;8;9

Nefunkční případ (když končí středníkem):

  • Zadání: 1;2;3;4;5;6;7;8;9;
  • Výraz: (;[^;]*){3}$
  • Výsledek: ;8;9;

Nefunkční případ (když celkový počet prvků je menší než požadovaný počet):

  • Zadání: 1;2;3;4;5;6;7;8;9
  • Výraz: (;[^;]*){20000000}$
  • Výsledek: ERROR

Prosím tedy info, jak by se dalo ty dva nefunkční případy ošetřit:

  1. Pokud by řetězec končil středníkem (ale nemusí tak končit). Hádám, že by se dalo preventivně koncový středník oříznout a dostat to tak do korektní podoby bez středníků, je tam totiž nadbytečný.
  2. Pokud by řetězec < N, kde N je počet požadovaných prvků od konce, tak to vrátí jen tolik prvků, kolik je k dispozici.

Díky moc všem, co mají na ty moje RE ještě nervy, tohle je poslední věc, co my zbývá řešit.

Nahlásit jako SPAM
IP: 31.30.175.–
Kit+15
Guru
13. 11. 2020   #2
-
+1
-
Zajímavé
fix +

#1 fix 

(;[^;]*){3};?$
Nahlásit jako SPAM
IP: 46.135.81.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
fix0
Stálý člen
13. 11. 2020   #3
-
0
-

Paráda, to ošetřilo (střední nebo nic) na konci.

Ještě bych potřeboval ošetřit ten počet prvků, jde to vůbec nějak, musí ne?

Tvůj výraz: (;[^;]*){3};?$

Nefunkční příklad #1 (počet prvků = počet požadovaných prvků):

  • Vstup: 1;2;3;
  • Výstup (Aktuální): ;2;3;
  • Výstup (Požadovaný): 1;2;3;

Nefunkční příklad #2 (počet prvků < počet požadovaných prvků):

  • Vstup: 1;2;
  • Výstup (Aktuální): ERROR
  • Výstup (Požadovaný): 1;2;

Pseudokód v PHP, který bych potřeboval v RE. Je mi jasné, že to nejde, ale pro pochopení, oč mi jde. Možná Vás to ale jenom zmate. NECHCI PHP, potřebuji fakt upravit ten RE od @Kit

$pozadovanychPrvku = 3;

$vstup = "1;2";

if (countPieces($vstup) > $pozadovanychPrvku ) {

      $vystup = regularniVyraz("(;[^;]*){$pozadovanychPrvku };?$")

} else {

      // >=

      $vystup = $vstup;

}

Můj tip: Budou to dvě core skupiny a mezi nimi bude OR, Kde jedna skupina bude v případě, že je to v pořádku a druhá v případě, kdy ta první skupina nebude nalezena. Něco jako try,catch. Pokud chápu jak to funguje.

Nahlásit jako SPAM
IP: 31.30.175.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

Podobná vlákna

Prvky pole — založil pav

Plovoucí prvky — založil Tomáš

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý