WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   reguljärt uttryck (https://www.wn.se/forum/showthread.php?t=28311)

andi 2008-04-01 15:29

Hur gör jag om jag vill ta bort all text efter eller före ett visst tecken eller ett visst ord med ett reguljärt uttryck i php?

martine 2008-04-01 16:22

Det är nog bäst att du lär dig lite om reguljära uttryck istället för att fråga varje gång du behöver ett. Sök på google…

preg_match() och preg_replace() osv. är funktionerna du använder i php.

andi 2008-04-01 17:34

Citat:

Originally posted by martine@Apr 1 2008, 16:22
Det är nog bäst att du lär dig lite om reguljära uttryck istället för att fråga varje gång du behöver ett. Sök på google…

preg_match() och preg_replace() osv. är funktionerna du använder i php.

Men snälla nån, hur vet du att jag frågar någon varje gång jag skall använda ett reguljärt uttryck? Vill du inte föra diskussionen framåt är det bara att skita i och svara istället för att haspla ur sig spydigheter.

Att jag skrev "...ett reguljärt uttryck i php" var för att visa att jag som lösning kan acceptera både POSIX-extended och Perl-kompatibla uttryck. Det finns ju lite olika "flavors" när det gäller reguljära uttryck och dessa båda funkar ju i PHP.
Har läst ett flertal guider och tutorials men aldrig sett det som jag frågar efter här i något exempel.
Någon annan därute som har gjort något liknande?

Jag antar att man skall använda sig av "$" för att matcha slutet av strängen, men skall man sätta parentes runt allt man skall matcha med "$"? Måste man matcha newlines i sitt uttryck om det finns ett sådant i slutet av strängen?

martine 2008-04-01 21:17

Ursäkta om du tog illa upp. Din fråga var kort och ospecifik och jag antog att du inte hade någon aning alls och då är det bästa att söka och försöka lite själv. Skriv ett lite mer specifikt inlägg nästa gång (så man vet om du inte vet vilken funktion du ska använda i php, vilket motor du helst ska använda, vilket uttryck som är bäst, osv.) - du skrev en rad som fråga men svarade på mitt inlägg med åtta…

preg_replace('/(Äpple).*$/ui',"$1",$str); borde ju lösa det hela (klippa av slutet, vänd på uttrycket för klippa av början)

Undrar om det inte borde finnas något effektivare sätt än regexp:ar för att lösa just detta problem (kommer dock inte på någon smidig funktion just nu).

Citat:

Jag antar att man skall använda sig av "$" för att matcha slutet av strängen, men skall man sätta parentes runt allt man skall matcha med "$"? Måste man matcha newlines i sitt uttryck om det finns ett sådant i slutet av strängen?
Man använder sig alltså av $ precis som du noterat. $ motsvarar antingen "newline" (med //m) eller slutet av strängen. Man behöver alltså inte matcha newline i sig utan kan använda bara $. Det du behöver senare sätter du i parantes, allt annat lämnar du därhän.

andi 2008-04-01 21:28

point taken, tack för hjälpen!

MMC 2008-04-01 21:45

En snabbare och enklare lösning (om du inte behöver mer funktionalitet än att bara matcha en sträng) är strstr http://se2.php.net/manual/en/function.strstr.php

Det kanske går ännu snabbare att använda strpos och substr.

martine 2008-04-01 21:58

Kan för övrigt påpeka att det kan vara praktiskt att göra just det andi frågar efter:

Kod:

if(preg_match('/^([a-z0-9-])\.jpe?g$/ui',$filnamn,$m)) {
 echo 'Filnamnet är '.$m[1];
}

Om det är ett filnamn utan åäö och mellanslag med filändelse jpg eller jpeg (stora eller små bokstäver) så skriv ut (eller gör något nyttigare) med basnamnet.

andi 2008-04-01 22:09

Jo, det är sant att det skulle gå att använda rena stränghanteringsfunktioner, nu är jag dock låst till just reguljära uttryck av lite olika anledningar.


Alla tider är GMT +2. Klockan är nu 20:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson