---
title: "Lägga till parameter i preg_replace-funktion?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/189569-lägga-till-parameter-i-preg-replace-funktion"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "bassebhu"
published: "2012-04-06T22:17:45.000Z"
updated: "2012-04-13T13:34:11.000Z"
replies: 7
views: 910
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/189569-lägga-till-parameter-i-preg-replace-funktion"
---

# Lägga till parameter i preg_replace-funktion?

## #1 — bassebhu, 2012-04-06T22:17Z

Hallå!

Jag kör en funktion som ersätter alla youtubelänkar till inbäddade videor. Det funkar, men jag skulle även vilja ha med ev youtube-querystrings.

Detta (notera att det inte alltid finns en &t= med!):
<http://www.youtube.com/watch?v=8N_tupPBtWQ&t=1m15s>

Vill jag ska resultera i:
\<iframe width="560" height="315" src="http://www.youtube.com/embed/8N_tupPBtWQ#t=1m15s" frameborder="0" allowfullscreen\>\</iframe\>

Hur gör jag detta? Antingen med ny kod eller modifiera den jag redan har nedan.

Tack!!

```
function video($str)
{
    $text = preg_replace('~
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube\.com    # or youtube.com followed by
          \S*             # Allow anything up to VIDEO_ID,
          [^\w\-\s]       # but char before ID is non-ID char.
        )                 # End host alternatives.
        ([\w\-]{10,12})      # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w\-]|$)     # Assert next char is non-ID or EOS.
        (?!               # Assert URL is not pre-linked.
          [?=&+%\w]*      # Allow URL (query) remainder.
          (?:             # Group pre-linked alternatives.
            [\'"][^<>]*>  # Either inside a start tag,
          | </a>          # or inside <a> element text contents.
          )               # End recognized pre-linked alts.
        )                 # End negative lookahead assertion.
        [?=&+%\w]*        # Consume any URL (query) remainder.
        ~ix', 
        '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>',
        $str);
    return $text;
}
```

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

## #2 — bassebhu, 2012-04-09T11:13Z

Nån som har nån häftig idé?  :)

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

## #3 — bassebhu, 2012-04-12T14:24Z

Tipselitips? :)

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

## #4 — metalboy, 2012-04-12T14:28Z

```php
function video($str)
{
    $text = preg_replace('~
        https?://         # Required scheme. Either http or https.
        (?:[0-9A-Z-]+\.)? # Optional subdomain.
        (?:               # Group host alternatives.
          youtu\.be/      # Either youtu.be,
        | youtube\.com    # or youtube.com followed by
          \S*             # Allow anything up to VIDEO_ID,
          [^\w\-\s]       # but char before ID is non-ID char.
        )                 # End host alternatives.
        ([\w\-]{10,12})      # $1: VIDEO_ID is exactly 11 chars.
        (?=[^\w\-]|$)     # Assert next char is non-ID or EOS.
        (?!               # Assert URL is not pre-linked.
          [?=&+%\w]*      # Allow URL (query) remainder.
          (?:             # Group pre-linked alternatives.
            [\'"][^<>]*>  # Either inside a start tag,
          | </a>          # or inside <a> element text contents.
          )               # End recognized pre-linked alts.
        )                 # End negative lookahead assertion.
        ([?=&+%\w]*)      # Extra parameters.
        ~ix', 
        '<iframe width="560" height="315" src="http://www.youtube.com/embed/$1#$2" frameborder="0" allowfullscreen></iframe>',
        $str);
    return $text;
}
```

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

## #5 — bassebhu, 2012-04-13T07:21Z

Tack, nu funkar det för youtubes korta länkar (youtu.be), men inte för de långa (som jag använde ovan). Där dyker videon upp och sen kommer detta i ren text efter: ";t=1m15s"

Hur löser man det?  :) Tack!

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

## #6 — metalboy, 2012-04-13T08:35Z

Jaså? Jag testade med den adress du skrev i första inlägget och det funkade. Nåja, jag kollar vidare på detta när jag kommer hem från jobbet om ingen annan har svarat innan dess   :)

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

## #7 — Dies_Irae, 2012-04-13T09:20Z

Kolla upp parse_url och parse_str <http://php.net/manual/en/function.parse-url.php> 

Gör livet betydligt mycket enklare i youtubes och många andra fall än att använda regexp

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

## #8 — bassebhu, 2012-04-13T13:34Z

> **[metalboy skrev:](https://www.webforum.nu/p/1549583)**
>
> Jaså? Jag testade med den adress du skrev i första inlägget och det funkade. Nåja, jag kollar vidare på detta när jag kommer hem från jobbet om ingen annan har svarat innan dess   :)

Mja, för mig skrivs det ut såhär:

```
<iframe width="560" height="315" src="http://www.youtube.com/embed/8N_tupPBtWQ#&amp" frameborder="0" allowfullscreen></iframe>;t=1m15s
```

Edit/ Lyckades lösa det genom att lägga till ett ; här: (\[?=&+;%\\w\]\*)
Vet inte vad det gjorde men det funkar. Rätt?

Edit2/ Och med ett minus-tecken däri så har den hittills svalt alla sorters youtubelänkar som jag testat! (\[?=&+-;%\\w\]\*)

Hurra! Tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/189569-lägga-till-parameter-i-preg-replace-funktion
