Výběr hodnoty z řetězce-regulární výraz PHP

kajka

Výběr hodnoty z řetězce-regulární výraz PHP
« kdy: 08. 09. 2018, 18:22:16 »
Může mi někdo napsat regulární výraz, kterým vyberu hodnotu "19" z toho konkrétního řetězce - o089,v, 19| o098 ?
Dopracoval jsem se k '#o089([0-9]+)\|/#' což by teoreticky mělo být funkční, ale bohužel není.


agent

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #1 kdy: 08. 09. 2018, 19:27:27 »
Tvůj dotaz, tak jak je formulovaný, nedává smysl.
Pokud ho vezmu doslova, tak stačí regex výraz /19/ který v řetězci podřetězec "19" najde a vybere.  ;D
(na testování doporučuju třeba https://regex101.com/ )
Ale to určitě nemá být cílem.

Kit

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #2 kdy: 08. 09. 2018, 19:43:20 »
Kód: [Vybrat]
$result = preg_replace("#o089.* ([0-9]+)\|.*#", "$1", $str);

Trenky dolu

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #3 kdy: 08. 09. 2018, 19:53:53 »
Co tak hodit vic prikladu, jestli tam je pattern tzn vzdy ,cislo| bez toho bude kazdy reseni hadani ...

kajka

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #4 kdy: 08. 09. 2018, 20:20:32 »
Uvedená hodnota "19" se mění, zbytek zůstává ve stejném formátu. (Ta 19 je teplota) , a ano, vždy je tam cislo|.

Nakonec jsem se dostal k preg_match_all('/o089,v,(.*?)\|/s', $str, $matches); což mi funguje.


agent

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #5 kdy: 08. 09. 2018, 21:36:38 »
Těch možností je spousta,  tvoje řešení ale vybírá nejen číslo (teplotu) ale i mezery před ním.
Já bych třeba raději použil "/o089,v, *(-?\d*)\|/s"  - ořežu mezery a vezmu v úvahu možnou zápornou teplotu.

kajka

Re:Výběr hodnoty z řetězce-regulární výraz PHP
« Odpověď #6 kdy: 09. 09. 2018, 11:31:43 »
Díky agent. Právě s tou mezerou jsem měl poté další problémy  :)