Autor Zpráva
Alois Marhoul
Profil *
Ahoj

Potřebuji sestavit regulerni vyraz, který z předloženého stringu vytáhne informaci o platu. Mám toto:
(d{2,}) ?(?=(,-|Kč|kč))
to si poradí například s řetězcem "120Kč/hod". jak ale ošetřit případné mezery mezi číslicemi: "17 000Kč/měsíc"?
zivan
Profil
Co tohle?

^([0-9]{2,}|[0-9]{1,3}( [0-9]{3})*)$

Samozrejme to je jen ta mena :-)
Alois Marhoul
Profil *
Skoro. Sice to vytáhne číslo, ale já v konečném důsledku potřebuju odstranit tu mezeru. Takže jsem to zkusil prohnat navíc ještě tímto:
$prav="/^([0-9]{2,}|[0-9]{1,3}) ([0-9]{3})*$/";
$nahrad="\1\2";
$plat = preg_replace($prav, $nahrad, $plat);

Ale nefunguje :(
Alphard
Profil
co třeba nejdříve odsranit všechny mezery?
Mastodont
Profil
Ve druhém řádku ( $nahrad = ... ) dej namísto uvozovek apostrofy.
Alois Marhoul
Profil *
Alphard:
ale jak odstranit mezery?

Mastodont:
nahrazení uvozovek apostrofy nezabralo
Alphard
Profil
ale jak odstranit mezery?
$bez_mezer = str_replace (" ", "", $s_mezerami);
Mastodont
Profil
Alois Marhoul
Mně zabralo, chodí to bez problémů. Nedáváš ale jako vstup celý řetězec "17 000Kč/měsíc", že ne? Pak totiož musíš vypustit $ na konci.
Alois Marhoul
Profil *
Díky za pomoc.

Narazil jsem na ještě jednu věc. Mám výraz pro kontrolu datumu, ten funguje OK. Ale snažím se ho rozšířit o "kladné tvrzení o předcházejícím" a nedaří se mi to. Konkrétně že před datem musí být výraz "od:" (nepovinná dvojtečka, nezáleží na velikosti písmen).

?([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([ 0-9]{4}|[0-9]{2})(?<=od:?)/i
Retal
Profil
Zaprvé lookbehind assertions jsou před výrazem, ne za ním, za druhé je tady nepotřebuješ :)
@od:?\s*([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]( [0-9]{4}|[0-9]{2})@i


Edit> Forum je celé posrané, žere zpětná lomítka, přidává mezery. Tenhle výraz si proto musíš ještě upravit.
Retal
Profil
Ty mezery navíc "( [ 0-9]{4}" tam přidává forum, ne já.
Alois Marhoul
Profil *
takže před dát výraz: @od:?s*
a za @i
jinak to je stejné?

nefunguje:( proč tam jsou ty zavináče?
Alois Marhoul
Profil *
vypadlo jedno zpětné lomítko před s
Retal
Profil
Zavináče ohraničují regulární výraz, můžeš tam klidně dát něco jiného (ale pak to ve výrazu musíš escapovat). A proč to nefunguje, ti neřeknu, protože nevím, čím to krmíš. Pokus se to vyřešit sám, regexp rozsekej a postupně mu předhazuj, co by měl poznat, dokud nenarazíš na chybnou pasáž.

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