Autor | Zpráva | ||
---|---|---|---|
VaclavT Profil * |
#1 · Zasláno: 20. 1. 2015, 17:01:11
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 |
#2 · Zasláno: 20. 1. 2015, 18:14:39
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 * |
#3 · Zasláno: 20. 1. 2015, 19:48:43
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 * |
#4 · Zasláno: 20. 1. 2015, 20:01:26
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 * |
#5 · Zasláno: 21. 1. 2015, 05:39:40
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 |
#6 · Zasláno: 21. 1. 2015, 15:42:22
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); } |
||
Časová prodleva: 9 let
|
0