19. november 2007 - 14:49
Der er
18 kommentarer og 1 løsning
Regular exprestions
Jeg har flg. tekst =logo= {menu} {nyheder} #bund# det jeg gerne vil udtræke er =logo= men hvis der stod ==logo eller =logo== eller andre kombination af lighedstengs skal den ikke matche der skal kun stå alt indne f.eks istedet for logo kun der står hans, banner, img etc. jeg har prøvet lidt. og er nået frem til ={1}[^=]*={1} som desvære også matcher =logo== men hvis jeg kommer ^ og $ på ^={1}[^=]*={1}$ matcher den ikke =logo= :S
Annonceindlæg tema
19. november 2007 - 14:56
#1
Hvad med: [^=]=[^=]*=[^=]
19. november 2007 - 14:57
#2
Rettelse: [^=]=[^=]+=[^=] ...et eller andet skal der vel stå derinde, så vi skal have + i stedet for *
19. november 2007 - 15:03
#3
/(^|[^=])=([a-z]+)=([^=]|$)/im for logo f.eks.?
19. november 2007 - 15:04
#4
næ kan ikke få den til det med dem,
19. november 2007 - 15:09
#5
det jeg vil er at hvis jeg =logo= {menu} =nyheder= #bund# så retunere den =logo= =nyheder= hvis jeg har =logo= {menu} =nyheder== #bund# retunere den kun =logo=
19. november 2007 - 15:13
#6
Det virker fint for mig: $tekst = "=logo= {menu} =nyheder== #bund#"; echo preg_replace("/(^|[^=])=([a-z]+)=([^=]|$)/im", "<h1>\\2</h1>", $tekst ); Her skriver den <h1>logo</h1> og resten bliver ikke rørt...
19. november 2007 - 15:19
#8
Ja, det kan også gøres med lookahead og lookbehind som nielle skriver, så er det: /(?<=)=([a-z]+)=(?!=)/im Det gør det samme som den jeg skrev ovenfor, bortset fra at "<h1>\\2</h1>" så skal være "<h1>\\1</h1>" da lookahead/-behind ikke tæller som grupper...
19. november 2007 - 15:23
#9
det står ikke tilfældigvis på hver sin linie?
19. november 2007 - 17:41
#10
Kommentar: coderdk 19/11-2007 15:13:15 > Det virker ikke hos mig, nu er meningen ogås at viser der både =logo= og =nyheder= skal den udksifte begge 2 , men med forskeligt indhold. Kommentar: nielle 19/11-2007 15:13:49 > Den giver fejl ved eregi Warning: eregi() [function.eregi]: REG_BADRPT in G:\wamp\www\handys\regex\reg.php on line 6 og ved preg_match_all Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '(' in G:\wamp\www\handys\regex\reg.php on line 5 Kommentar: coderdk 19/11-2007 15:19:20 > får tomme reulstater med /(?<=)=([a-z]+)=(?!=)/im med preg_match_all og fejl ved eregi. Kommentar: smitten1 19/11-2007 15:23:43 > som regle jo. det jeg vil er blot at først utrække allt =tilfældig tekst= så jeg kan behandle dem, jeg aner intet om hvor man =tag= der er.
19. november 2007 - 17:53
#11
> Den giver fejl ved eregi Du bør heller ikke bruge de oldgamle ereg-funktioner. De forsvinder snart helt fra PHP. Desuden er preg-funktionerne hurtiger og tilbyder langt flere muligheder (som f.eks. den viste model). :^) > og ved preg_match_all Svært at forholde sig til fejlen uden at have set din kode.
19. november 2007 - 17:55
#12
echo preg_replace("/(^|[^=])=([^=]+)=([^=]|$)/im", "<h1>\\2</h1>", $tekst ); og echo preg_replace("/(?<=)=([^=]+)=(?!=)/i", "<h1>\\1</h1>", $tekst ); virker fint hos mig - Den erstatter alle "tags" som =hej= og =tilfældig tekst= men f.eks. ikke ==hej= eller =test==
19. november 2007 - 17:56
#13
(og hvorfor bruge preg_match_all når du kan bruge replace? du skal vel bare erstatte dem med noget? Måske skal du bruge preg_replace og /e switchen, hvis du ikke direkte bare kan bruge preg_replace
19. november 2007 - 18:43
#14
nille -> preg_match_all($exp,$txt,$match); hvor $exp kommer fra en form og inholder regular expressionen har også prøvet manuelt indkodet med samme fejl. noget jeg heller ikke kan forså er at burde .* ikke matche alt? hmm. kan se at (.*) at macther lidt specielt? Array ( [0] => Array ( [0] => =logo= [1] => [2] => {menu} [3] => [4] => =nyheder= [5] => [6] => #bund# [7] => [8] => ) ) :s
19. november 2007 - 18:49
#15
Husk at preg-versiuonerne skal have formen: "/.../modifiers" Du skal derfor nok gøre det sådan her i din ovenstående kode: preg_match_all("/$exp/m",$txt,$match);
19. november 2007 - 19:15
#16
ja, det fnadt jeg ud af, fandt ud af coders /(^|[^=])=([^=]+)=([^=]|$)/im ser ud til at virke den gir flg. resultat Array ( [0] => Array ( [0] => =logo= [1] => =nyheder= ) [1] => Array ( [0] => [1] => ) [2] => Array ( [0] => logo [1] => nyheder ) [3] => Array ( [0] => [1] => ) ) på =logo= {menu} =nyheder= #bund# og flg. resultat Array ( [0] => Array ( [0] => =nyheder= ) [1] => Array ( [0] => ) [2] => Array ( [0] => nyheder ) [3] => Array ( [0] => ) ) er der nogen måder at komme af me mellerumene? og evt. fjer dem uden = tegn? og skulle der var en mulighed at få en forklaring for fatter hat af den perl syntax.
19. november 2007 - 21:04
#17
Komme af med mellemrummene og ferne dem uden =? Bare brug $array[2] og ingen af de andre? ;P Men igen: Hvad vil du opnå og hvorfor bruge preg_match_all i stedet for preg_replace? :)
20. november 2007 - 14:18
#18
kam man være sikker påat de altid liger sig i 2'ern? men gik bare igenem arrayet og laved et nyt med dem jeg skulle bruge, men kan stadig ikke hitte ud af din regular expression: /(^|[^=])=([^=]+)=([^=]|$)/i
20. november 2007 - 15:49
#19
Ja, de ligger altid i 2'eren. (^|[^=]) betyder starten af en linje eller et tegn der ikke er = =([^=]+)= betyder = efterfulgt af mindst ét tegn der ikke er = efterfulgt af = ([^=]|$) betyder et tegn der ikke er = eller slutningen af en linje
Vi tilbyder markedets bedste kurser inden for webudvikling