Autor Zpráva
Fury
Profil *
Zdravím,

potřeboval bych poradit, jak nejlépe dosáhnout odstranění části stringu. Mám např. tyto záznamy:

textový záznam bla "A" (1)
textový záznam csa "B" (12)
textový záznam "C" (23)
textový záznam (15)

A já bych potřeboval nasměrovat jak odstranit závorku (i to co je v ní) a zároveň odstranit to, co je v uvozovkách (ideálně to spíš např. jen splitnout, abych ten záznam, co je ještě v uvozovkách, mohl použít).

Díky moc!
pcmanik
Profil
Fury:
Čiže chceš z 'textový záznam bla "A" (1)' ziskať dva údaje a to 'textový záznam bla' a 'A' rozumiem tomu správne? Pričom ten druhý údaj (v úvodzovkách) je voliteľný, teda že záznam ho nemusí obsahovať ano?
Fury
Profil *
pcmanik:
Přesně tak.
juriad
Profil
preg_match('/^(.*?)\s*(?:"(.*)")?\s*(?:\((.*)\))?$/', $text, $zaznam);
$zaznam[1] = textový záznam
$zaznam[2] = to co je v uvozovkách nebo neexistuje
$zaznam[3] = to co je v závorkách nebo neexistuje
Zda daná čast je obsažená, otestuj napřed pomocí isset($zaznam[2]).

Ukázka online: regex101.com/r/pB4xU0/2 (toho mg si nevšímej, to je tam jen proto, aby se zpracovaly všechny řádky najednou).
Fury
Profil *
juriad:
Super, to je přesně ono. Díky moc!

Každopádně jsem tam narazil na jeden problém, např. pokud mám ten string v uvozovkách, tzn. např:

"SPORTOVNÍ ZÁZNAM" (1)

Dá se i toto ošetřit?

Díky!
juriad
Profil
To bych řešil až v PHP:
if (!isset($zaznam[1]) && isset($zaznam[2])) {
  $zaznam[1] = $zaznam[2];
  unset $zaznam[2];
}

A ten regex bych trošku upravil:
'/^([^()"]+?)??\s*(?:"(.*)")?\s*(?:\((.*)\))?$/'

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: