Permalänk
Medlem

Reguljärt uttryck (PHP)

Har ett reguljärt uttryck som inte är så effektivt som jag önskar. Språket är PHP och det används för att ta ut ett ord (med alfabetiska tecken) som står mellan två valutatecken (¤) i en sträng. Visar ett exempel på hur det ser ut nu:

$string = 'lorem¤hej¤ipsum';
$handle = preg_match('/¤\w+¤/', $string, $match);
$trim = trim($match[0], '¤');

I det reguljära uttrycket tas hela "¤hej¤" ut ur strängen och sedan körs trim() för att ta bort valutatecknen (¤), och lämnar "hej" kvar. Jag vill att bara "hej" ska vara kvar redan efter det reguljära uttrycket (så att jag inte behöver använda trim()), men vet inte riktigt hur jag ska gå till väga.

Tack på förhand!

Erik

Permalänk
Hedersmedlem

Tror att
$handle = preg_match('/¤(\w+)¤/', $string, $match);
gör det du vill. Lägg märke till "tror"

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Hedersmedlem

Samt

$match[1]

Första indexet innehåller hela strängen.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Thomas
Tror att
$handle = preg_match('/¤(\w+)¤/', $string, $match);
gör det du vill. Lägg märke till "tror"

Tack för era svar Thomas och m0REc! Jag har dock provat detta och det skapar två nycklar i $match, "¤hej¤" hamnar på första nyckeln och "hej" hamnar på andra nyckeln. Visserligen är det ju inga problem att helt enkelt använda den andra nyckeln, men det känns lite fult :). Finns det något alternativ?

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av paraply
Tack för era svar Thomas och m0REc! Jag har dock provat detta och det skapar två nycklar i $match, "¤hej¤" hamnar på första nyckeln och "hej" hamnar på andra nyckeln. Visserligen är det ju inga problem att helt enkelt använda den andra nyckeln, men det känns lite fult :). Finns det något alternativ?

Nope, det är precis som det är tänkt att fungera:

Citat:

If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Nope, det är precis som det är tänkt att fungera:

Okej, men då kör jag på det. Tack för era svar!

Permalänk
Inaktiv

Annars gör följande uttryck exakt det du vill:

preg_match('/(?!¤)\\w+(?=¤)/', $string, $match);