Portál AbcLinuxu, 7. května 2025 05:34

Dotaz: regexp

2.4.2011 14:46 Kamil.Plech
regexp
Přečteno: 337×
Odpovědět | Admin
Dobrý den. Potřeboval bych poradit s regulárními výrazy. Jde mi o nahrazování znaků. Pořád se mi nedaří nahradit dolar/skupinu po sobe následujících dolarů ($/$$$) za &dolar; ... problémem je fakt, že vše je uzavřeno v dvou dalších dolarech, které nahradit nechci.

Abych to lépe ukázal na příkladu:

Vstup: $ahoj $$$Kamile$$$ jak se dneska mas???$

Výstup: $ahoj &dolar;Kamile,&dolar; jak se dneska mas???$

nebo

Vstup: $josef byl $$toho$$ rana $ponekud$ neklidny$

Výstup: $josef byl &dolar;toho&dolar; rana &dolar;ponekud&dolar; neklidny$

Děkuji všem za všechny nápady a rady. Kamil.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.4.2011 15:38 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chcete tedy nahradit všechny výskyty dolarů mezi prvním a posledním dolarem? Pokud používaná knihovna pro regulérní výrazy umí vyhlížení, použil bych takovouhle konstrukci pro vyhledání těch skupin znaků, které se mají nahradit:
(?<=[^$]*$).*$+.*(?=$[^$]*)
2.4.2011 19:16 l4m4
Rozbalit Rozbalit vše Re: regexp
Jinak je tu klasická varianta: nahradit první a poslední dolar něčím jiným (neexistuje-li žádný bezpečný znak použitelný coby náhrada, tak se musí požuít nějaké escapování), což lze snadno, pak nahradit ty zbývající, a nakonec zase ten první a poslední nahradit zpět.
4.4.2011 14:45 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: regexp
Nebo muzeme uvodni a koncovy '$' zahodit a po nahrazeni zbyvajicich opet pridat...
4.4.2011 14:34 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi bych se to nesnazil udelat naraz, ale rozporcoval bych nejprve vstup podle vzoru $+ a nasledne ziskany seznam opet slozil s pozadovanym oddelovacem. V PERLu napriklad takto:
@parts = split(/\$+/, $input);
$output = '$' . join('&dolar;', @parts[1..$#parts-1]). '$';
4.4.2011 16:14 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: regexp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozne reseni v PERLu - hledam retezec jenz neobsahuje znak '$' nasledovany jednim ci sekvenci znaku '$' za niz nenasleduje konec retezce. Nalezeny text vratnim zpet a dolary nahradim textem '&dolar;'. Modifikator g zajisti nahrazeni vsech vyskytu. Uvadeny regexp akceptuje i stav kdy text konci vice nez jednim znakem '$'.
$input =~ s/([^\$]+)\$+(?!$)/$1&dolar;/g;
Pokud by se na vstupu objevil text ukonceny sekvenci dolaru, nebude tato nahrazena ale povazovana za ukonceni retezce a zachovana!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.