---
title: "Problem med back reference i preg_replace"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/178037-problem-med-back-reference-i-preg-replace"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2009-04-15T11:27:05.000Z"
updated: "2009-04-16T11:34:16.000Z"
replies: 6
views: 365
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/178037-problem-med-back-reference-i-preg-replace"
---

# Problem med back reference i preg_replace

## #1 — learn, 2009-04-15T11:27Z

Jag har ett problem med preg_replace när jag använder backreference $.

Följande script...

```php
$value= $_POST["namn"];

$str = "<input type=\"text\" name=\"namn\" value=\"\" />";

$new_str = preg_replace("/(\<input(.*?)name\=\"namn\"(.*?)value\=\")(\")/", "$1$value$4", $str);

echo $str;
echo "<br>";
echo $new_str;
```

...får följande resultat när $\_POST\["namn"\] = "Oskar":

> \<input type="text" name="namn" value="" /\>
> \<input type="text" name="namn" value="Oskar" /\>

Precis som jag önskar!

**MEN** om $\_POST\["namn"\] = "666" (eller andra siffror) så blir det knas:

> \<input type="text" name="namn" value="" /\>
> 66" /\>

Jag har lyckats luska ut att det har att göra med min backreference, den blir ju i detta fall så här:

```php
$new_str = preg_replace("/(\<input(.*?)name\=\"namn\"(.*?)value\=\")(\")/", "$1666$4", $str);
```

Eller? Hur kan jag komma runt detta?

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

## #2 — learn, 2009-04-15T13:28Z

Någon som vet?

Förmodligen är det en jätteenkel lösning...men jag kommer inte på den....

Som sagt funkar det kanon så länge $\_POST\["namn"\] börjar med en bokstav, men är det en siffra blir det knaaaas!

Snälla  :)

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

## #3 — learn, 2009-04-16T07:31Z

> **[learn skrev:](https://www.webforum.nu/p/1464448)**
>
> Någon som vet?
>
> Förmodligen är det en jätteenkel lösning...men jag kommer inte på den....
>
> Som sagt funkar det kanon så länge $\_POST\["namn"\] börjar med en bokstav, men är det en siffra blir det knaaaas!
>
> Snälla  :)

Hur ska jag göra? Det står helt still...!  :(

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

## #4 — learn, 2009-04-16T10:38Z

Problemet ligger kanske inte i preg_replace utan hanteringen av strängen (som i detta fall blir siffror)... A, jag har iaf ingen aning om hur man kan lösa detta...!

Det måste ju finnas någon PHP-smart här omkring?  ;)

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

## #5 — Peter S, 2009-04-16T10:52Z

${1}$value$4

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

## #6 — learn, 2009-04-16T11:29Z

> **[Peter S skrev:](https://www.webforum.nu/p/1464559)**
>
> ${1}$value$4

Hmm, nä. Då följer inte den första backreferencen $1 med ens när $\_POST\["namn"\] börjar med en bokstav....

```php
$replacement = "${1}$value$4";
```

Är det någon speciell modifiersom krävs för detta?

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

## #7 — learn, 2009-04-16T11:34Z

Ahh. Detta verkar funka:

```php
$replacement = '${1}'.$value.'$4';
```

Det var alltså "fnuttarna" det var fel på...  :)

Tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/178037-problem-med-back-reference-i-preg-replace
