Autor | Zpráva | ||
---|---|---|---|
Alois Marhoul Profil * |
#1 · Zasláno: 24. 7. 2007, 17:16:57
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 |
#2 · Zasláno: 24. 7. 2007, 18:17:45 · Upravil/a: zivan
Co tohle?
^([0-9]{2,}|[0-9]{1,3}( [0-9]{3})*)$ Samozrejme to je jen ta mena :-) |
||
Alois Marhoul Profil * |
#3 · Zasláno: 25. 7. 2007, 10:43:51
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 |
#4 · Zasláno: 25. 7. 2007, 10:49:44
co třeba nejdříve odsranit všechny mezery?
|
||
Mastodont Profil |
#5 · Zasláno: 25. 7. 2007, 10:58:11
Ve druhém řádku ( $nahrad = ... ) dej namísto uvozovek apostrofy.
|
||
Alois Marhoul Profil * |
#6 · Zasláno: 25. 7. 2007, 11:21:39
Alphard:
ale jak odstranit mezery? Mastodont: nahrazení uvozovek apostrofy nezabralo |
||
Alphard Profil |
#7 · Zasláno: 25. 7. 2007, 11:38:45
ale jak odstranit mezery?
$bez_mezer = str_replace (" ", "", $s_mezerami); |
||
Mastodont Profil |
#8 · Zasláno: 25. 7. 2007, 11:58:45
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 * |
#9 · Zasláno: 25. 7. 2007, 12:52:47
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 |
#10 · Zasláno: 25. 7. 2007, 13:02:32 · Upravil/a: Retal
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 |
#11 · Zasláno: 25. 7. 2007, 13:04:53
Ty mezery navíc "( [ 0-9]{4}" tam přidává forum, ne já.
|
||
Alois Marhoul Profil * |
#12 · Zasláno: 25. 7. 2007, 13:13:21
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 * |
#13 · Zasláno: 25. 7. 2007, 13:14:24
vypadlo jedno zpětné lomítko před s
|
||
Retal Profil |
#14 · Zasláno: 25. 7. 2007, 13:33:06
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áž.
|
||
Časová prodleva: 17 let
|
0