Autor Zpráva
VaclavT
Profil *
Potřebuji přijatý text přepsat na přijatelnější zobrazení uživateli do lepe čitelného tvaru. Text obsahuje konstantní zkratku př.: XXX potom následuje mezera a označení resp 3 čísla to celé je obaleno větnými čárkami.

Vzor1: ,XXX 123,XXX 321,XXX 1111,
Vzor2: ,XXX 123,
Vzor3: ,XXX 111,XXX 222,
*ty čárky tam opravdu takto jsou před a za touto pasáží je libovolný text

Já potřebuji získat toto:

Výsledek1: XXX 123, 321, 111
Výsledek2: XXX 123
Výsledek3: XXX 111, 222

Měli byste radu jak toho dosáhnout?
Děkuji za pomoc.
Alphard
Profil
Nepíšete v jakém jazyce, v PHP bych to udělal takhle:
$in = ' ,XXX 123,XXX 321,XXX 1111,';
$sep = 'XXX';

$filter = function($item) { return trim($item, ", \t\n\r\0\x0B"); };
echo $sep.' '.implode(', ', array_filter(array_map($filter, explode($sep, $in))));
VaclavT
Profil *
Ano, v PHP, kód je super, jen do té doby než vložím celý řetězec resp. tato ošetřovaná část je vnořena mezi standartní text.

Příklad: "Kočka leze dírou ,XXX 111,XXX 222, pes oknem."
Výsledek: "Kočka leze dírou XXX 111, 222 pes oknem."

Jinak děkuji za pomoc
Alphard_
Profil *
Všechno jde zkomplikovat...
$in = 'Kocka leze dirou ,XXX 123,XXX 321,XXX 1111, pes oknem.';
$key = 'XXX';

$filter = function($item) use ($key) { $parts = explode(' ', $item); return (count($parts)==2 && strpos($parts[0], $key)===0) ? trim($parts[1]) : ''; };
echo $key.' '.implode(', ', array_filter(array_map($filter, explode(',', $in))));
VaclavT
Profil *
Výsledek je: XXX 123, 321, 1111
Já bych potřeboval to cele vložit na původní místo.
takže takto: Kočka leze dírou XXX 123, 321, 1111 pes oknem.

Toto bych dohromady opravdu nedal, děkuji!
Alphard
Profil
VaclavT:
Já bych potřeboval to cele vložit na původní místo.
Aha, já jsem [#1] pochopil jako výběr textu. Návrat na původní místo lze udělat dopsáním dalšího řádku.
function transform($input, $key)
{
    $fceFilter = function($item) { return explode(' ', $item)[1]; };
    $fceReplace = function($match) use ($key, $fceFilter) {
        return $key.' '.implode(', ', array_map($fceFilter, preg_split('~,~', $match[0], null, PREG_SPLIT_NO_EMPTY))); };
    return preg_replace_callback('~(,?'.preg_quote($key, '~').'\s+\d+,)+~s', $fceReplace, $input);
}

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0