Autor Zpráva
karel_
Profil *
Ahoj,
"nejakym zázrakem" a rychlostudiem jsem došel k řešení rozparsování částí textu do dvou proměnných, ale nemůžů přijít na to, jak "připojit" další:
 $desc="user:karelp
 popis od uzivatele,
 nebo nejaky komentar";
 
preg_match('/(?P<status>\w+):(?P<username>\w+)/', $desc, $matches);
print_r($matches);
/* 
rozparsuje do pole:  
Array ( 
[0] => user:karelp 
[status] => user 
[1] => user 
[username] => karelp 
[2] => karelp
*/ ) 


tj jak připojit "popis od uzivatele, \nnebo nejaky komentar" ?
Tuším, že by to mohlo být
preg_match('/(?P<status>\w+):(?P<username>\w+)\n(?P<note>\w+)/', $desc, $matches);


ale nebere...
Jack Finger
Profil
karel_

Dle mého názoru je zde problémů více:
1. místo \n musí být \\n
2. vyvstává problém s novým řádkem na různých systémech (UNIX má tuším jen \r, Windows \r\n, OS X \n nebo tak nějak). Tedy pokud máš řetězec:
první řádek\ndruhý řádek

pak je to v pořádku. Máš-li ale:
První řádek
druhý řádek

může nastat problém, protože každý systém si jej přeloží na ten svůj znak.
Tori
Profil
karel:
Odpovídající odřádkování pro systém, na kterém PHP běží, je v konstantě PHP_EOL. Pokud bude některá část (např.ten komentář) zalomená přes více řádků, musíte použít i modifikátor s.
preg_match('/^(?P<status>\w+):(?P<username>\w+)'.PHP_EOL.'+(?P<note>.+)/s', $desc, $matches);
Případně místo PHP_EOL+ použijte
\s+
- to vám odstraní i ty mezery na začátku komentáře.
karel_
Profil *
díky, zkusím se s tím poprat...

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:

0