Autor | Zpráva | ||
---|---|---|---|
Casper Profil |
#1 · Zasláno: 6. 11. 2009, 18:30:14
Dobrý den, snažil jsem se vymyslet regulár, aby mi z libovolného řetězce začínajícího nebo končícího pomlčkou (nebo obojí) vytvořil samotný řetězec bez krajních pomlček. Vymyslel jsem dva regulární výrazy, které sice funguje přesně jak mají, ale rád bych řetězec testoval jen jednou.
$url = ereg_replace('^(.*)-$','\\1',$url); $url = ereg_replace('^-(.*)$','\\1',$url); Prosím poraďte jak skloubit tyto dva reguláry v jeden se stejným účinkem na řetězec :) děkuji |
||
Kacko Profil |
#2 · Zasláno: 6. 11. 2009, 18:32:45
^-?(.*)-?$ by mohlo fungovat |
||
Casper Profil |
#3 · Zasláno: 6. 11. 2009, 18:35:49 · Upravil/a: Casper
To jsem zkoušel jako první, ale nefunguje, ponechá poslední pomlčku. Sice nevím proč, protože by regulár přece měl být "žravý" ale je to tak...
|
||
Joker Profil |
#4 · Zasláno: 6. 11. 2009, 18:39:26
Casper:
„Sice nevím proč, protože by regulár přece měl být "žravý"“ No asi právě proto... že pomlčka na konci taky odpovídá .* ...možná by pomohl spíš líný: ^-?(.*?)-?$ |
||
Casper Profil |
#5 · Zasláno: 6. 11. 2009, 18:43:26
JoKer: máte pravdu, zamyslel jsem se špatným směrem, každopádně vaše možnost hlásí Warning: ereg_replace() [function.ereg-replace]: REG_BADRPT
|
||
Kacko Profil |
#6 · Zasláno: 6. 11. 2009, 18:43:46
A co na to pouzit obycejny
trim($url,"-") |
||
Casper Profil |
#7 · Zasláno: 6. 11. 2009, 18:48:30 · Upravil/a: Casper
Kacko: Dobrý nápad, ale nefunguje...
EDIT: jak jsem pochopil z manuálu, trim odstraňuje pouze netisknutelné znaky, druhý parametr může určit pouze některé z nich, nikoli jiné (tisknutelné) znaky |
||
Kacko Profil |
#8 · Zasláno: 6. 11. 2009, 18:50:58
Casper:
To reseni funguje, chyba bude jinde. Zkontrolujte co je v $url |
||
Casper Profil |
#9 · Zasláno: 6. 11. 2009, 18:55:31 · Upravil/a: Casper
Kacko: tak to je zvláštní, že vám toto řešení funguje, můj string už je ošetřený pro URL, obsahuje pouze a-z0-9_- jinak nic, tak nevím kde je chyba, verze php je vyšší než 4.1.0, takže parametr podporuje... stále se však domnívám, že trim ostraňuje pouze netisknutelné znaky
|
||
Kacko Profil |
#10 · Zasláno: 6. 11. 2009, 19:22:13
Casper:
To je vazne divne. Me to na 5.2.8 funguje. |
||
igamenir Profil |
#11 · Zasláno: 6. 11. 2009, 19:27:17 · Upravil/a: igamenir
Casper, Joker:
Jokerův postup je dobrý, udělal bych ho taky, ale funguje jen v preg, tedy $url = preg_replace('~^-?(.*?)-?$~','\\1',$url); Navíc koukám, že "As of PHP 5.3.0 the regex extension is deprecated in favor of the PCRE extension." takže přesun k preg není určitě od věci. |
||
Casper Profil |
#12 · Zasláno: 6. 11. 2009, 19:29:19 · Upravil/a: Casper
Sakra jsem idiot, už to jede, omlouvám se za zmatky, děkuji za elegantní řešení přes trim i přes reguláry
|
||
Časová prodleva: 14 let
|
0