---
title: "Länkar och reg-uttryck"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/14661-länkar-och-reg-uttryck"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Swey"
published: "2000-07-12T20:47:00.000Z"
updated: "2000-07-16T19:42:00.000Z"
replies: 15
views: 409
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/14661-länkar-och-reg-uttryck"
---

# Länkar och reg-uttryck

## #1 — Swey, 2000-07-12T20:47Z

Jag hittade dessa uttryck för att hantera länkar med reguljära uttryck.

Vad gör de och hur man gör för att de ska fungera?

$body = eregi_replace("\<(mailto:)(\[^ \>\\n\\t\]+)\>", "{phopen}a href=\\"\\\\1\\\\2\\"{phclose}\\\\2{phopen}/a{phclose}", $body);
$body = eregi_replace("\<(\[http\|news\|ftp\]+://\[^ \>\\n\\t\]+)\>", "{phopen}a href=\\"\\\\1\\"{phclose}\\\\1{phopen}/a{phclose}", $body);

Permalänk: https://www.webforum.nu/p/14661

## #2 — sgtpepper, 2000-07-12T21:47Z

Dom ser lite konstiga ut tycker jag, det kräver att man skriver länkarna inom \< \> för att det ska funka och det ska man ju inte behöva. Sen vet jag inte riktigt varför {phclose} och {phopen} behövs, vanliga \< och \> funkar för mig. Testa:

$body1 = eregi_replace("(mailto:)(\[^ \>\\n\\t\]+)", "\<a href=\\"\\\\1\\\\2\\"\>\\\\2\</a\>", $body);
$body2 = eregi_replace("(\[http\|news\|ftp\]+://\[^ \>\\n\\t\]+)", "\<a href=\\"\\\\1\\"\>\\\\1\</a\>", $body);

Gör om *mailto:namn@server.se* och *http://www.server.se* till länkar (inkl ftp och news).

Permalänk: https://www.webforum.nu/p/311497

## #3 — Swey, 2000-07-12T22:06Z

Hittade det där i Phorum som är forum för PHP med PostgreSQL och mySQL. Tyckte också det var lite konstigt.

Men nu fungerar det utmärkt. Tack!

Permalänk: https://www.webforum.nu/p/311498

## #4 — Swey, 2000-07-12T23:00Z

Hm... problem...

Det som du postade gör att länkarna inkluderar tecknet efteråt

det blir alltså så här
\<a href="url "\>url \</a\>
eller så här
\<a href="url
"\>url
\</a\>

Lösning?

Permalänk: https://www.webforum.nu/p/311499

## #5 — sgtpepper, 2000-07-12T23:10Z

Testa och lägg in \\r i ^-listan:

eregi_replace("(mailto:)(\[^ \>\\n\\t**\\r**\]+)", "\<a href=\\"\\\\1\\\\2\\"\>\\\\2\</a\>", $body);
eregi_replace("(\[http\|news\|ftp\]+://\[^ \>\\n\\t**\\r**\]+)", "\<a href=\\"\\\\1\\"\>\\\\1\</a\>", $body1);

Det borde lösa radmatningen (gör det för mig iaf). Att mellanslaget tas med är konstigt, för den finns ju redan med i ^-listan. Kör du under Windows?

Permalänk: https://www.webforum.nu/p/311500

## #6 — Swey, 2000-07-12T23:26Z

Linux på servern och Windows som klient. Kör iofs. hemma också.

Det verkar ha löst sig nu. Vet inte riktigt vad det första berodde på.

Tack :)

Permalänk: https://www.webforum.nu/p/311501

## #7 — spango, 2000-07-13T01:06Z

varför ha
(\[^ \>\\n\\t\\r\]+)
när man kan ha
(\\S+)
i stället?

Permalänk: https://www.webforum.nu/p/311502

## #8 — Swey, 2000-07-13T01:38Z

Hur menar du?

Permalänk: https://www.webforum.nu/p/311503

## #9 — Swey, 2000-07-13T12:19Z

Förklara. Får inte \\S att fungera. Vad gör den?

Tack :)

Permalänk: https://www.webforum.nu/p/311504

## #10 — nicclas, 2000-07-13T12:40Z

Från <http://www.devshed.com/Server_Side/Administration/RegExp/page3.html>  :

\\S = used to match everything that is \*not\* a white space character

/nicclas @ <http://www.allanyheter.com>

Permalänk: https://www.webforum.nu/p/311505

## #11 — Swey, 2000-07-13T13:21Z

aha... får labba lite...

Jag vill lägga till en kriterie. Om länken slutar med en punkt ska inte punkten ingå i länken. Men punkter ska kunna ingå i länken om den inte slutar på den. Den ska alltså sluta när den stöter på punkt och whitespace(?).

Permalänk: https://www.webforum.nu/p/311506

## #12 — nicclas, 2000-07-13T14:24Z

Enkelt, fult och långsamt, men det funkar :) :

```
<?
$body="Matti har [url="http://www.nic-sys.se/\n"]http://www.nic-sys.se/\n[/url]  som startsida! Clas har tröttnat på [url="http://www.nic-sys.se."]http://www.nic-sys.se.[/url]  Nicclas tycker att [url="http://www.allanyheter.com"]http://www.allanyheter.com[/url]  är coolare!\n\n";

$body = eregi_replace("(mailto:)([^ >\n\t\r]+)", "<a href=\"\\1\\2\">\\2</a>", $body);
$body = eregi_replace("([http|news|ftp]+://([^ \n\r\t]+))\. ", "<a href=\"\\1\">\\1</a>. ", $body);
$body = eregi_replace("([http|news|ftp]+://([^ \n\r\t]+))", "<a href=\"\\1\">\\1</a>", $body);

echo $body;

?>
```

/nicclas   <http://www.nic-sys.se/> 

\[Redigerat av nicclas den 15 jul 2000\]

Permalänk: https://www.webforum.nu/p/311507

## #13 — Swey, 2000-07-14T20:35Z

Tack, skkulle man kunna få in båda de sista i ett uttryck?

Sen fungerar inte \\\\S för mig. Det söker efter tecknet S.

Permalänk: https://www.webforum.nu/p/311508

## #14 — nicclas, 2000-07-15T16:14Z

Ooops... \\S verkar bara fungera i Perl-versionen av r.u.'s. Men eftersom PHP även har stöd för Perl-versionen :) så funkar

```
<?
$body="Matti har [url="http://www.nic-sys.se/\n"]http://www.nic-sys.se/\n[/url]  som startsida! Clas har tröttnat på [url="http://www.nic-sys.se."]http://www.nic-sys.se.[/url]  Nicclas tycker att [url="http://www.allanyheter.com"]http://www.allanyheter.com[/url]  är coolare!\n\n";
$body=preg_replace("/([http|news|ftp]+:\/\/[\S]+)/", "<a href=\"\\1\">\\1</a>", $body);
echo $body;
?>
```

/nicclas
[Blir det några nyheter, eller?](http://www.allanyheter.com)

Permalänk: https://www.webforum.nu/p/311509

## #15 — Swey, 2000-07-16T19:37Z

Det fungerar man du glömde punkten ;)

Permalänk: https://www.webforum.nu/p/311510

## #16 — nicclas, 2000-07-16T19:42Z

Jo, jag vet, det var med flit. Lösningen med .-en var ju inte så bra... Här fokuserar vi på ett problem i taget.
:)
/nicclas <http://www.nic-sys.se>

Permalänk: https://www.webforum.nu/p/311511

---

Tråden på webben: https://www.webforum.nu/amne/php/14661-länkar-och-reg-uttryck
