---
title: "preg_match_all - hur ska mitt regexp se ut?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/189856-preg-match-all-hur-ska-mitt-regexp-se-ut"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "webbo"
published: "2012-06-05T14:14:20.000Z"
updated: "2012-07-29T11:16:05.000Z"
replies: 14
views: 1864
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/189856-preg-match-all-hur-ska-mitt-regexp-se-ut"
---

# preg_match_all - hur ska mitt regexp se ut?

## #1 — webbo, 2012-06-05T14:14Z

Jag vill kolla igenom ett kodstycke och hitta alla förekomster av några funktioner (mail_to, link_to, link_to_funktion).

Hur ska mitt regexp se ut?

Jag har testat följande men det fungerar inte:

```php

// Exempel
$str = "Bla bla <?php echo mail_to('test@test.com') ?> bla bla <?php echo link_to_funktion('Alert', 'alert(\'Hej!\')') ?> bla bla bla <?php echo link_to('test.html') ?> bla bla bla";

preg_match_all
(
	"/mail_to|link_to|link_to_function\(\'(.*)\'\)/",
	$str,
	$matches
);
```

Det är alltså det innanför "funktions-paranteserna" jag vill få ut... I exemplet ovan: test@test.com, Alert och test.html

Tack för hjälpen!

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

## #2 — metalboy, 2012-06-05T14:18Z

```php
<?php
// Exempel
$str = "Bla bla <?php echo mail_to('test@test.com') ?> bla bla <?php echo link_to_funktion('Alert', 'alert(\'Hej!\')') ?> bla bla bla <?php echo link_to('test.html') ?> bla bla bla";

preg_match_all
(
    "/(mail_to|link_to|link_to_function)\(\'(.*?)\'\)/",
    $str,
    $matches
);

echo '<pre>';
print_r($matches);
echo '</pre>';
```

Det du vill ha ut finns i $matches\[2\]

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

## #3 — webbo, 2012-06-05T14:25Z

Tack för snabbt svar! Aha, man måste alltså ha parenteser där också i mitt regexp... 

Nu har jag ett problem dock. Det kan ju vara två stycken parametrar i funktionsanropet. Det är bara den första jag vill ha och den omgärdas av antingen ' eller "

Hur göra?

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

## #4 — webbo, 2012-06-05T21:49Z

Någon som har koll på detta?

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

## #5 — Aisee, 2012-06-28T01:39Z

Testa med

```
(mail_to|link_to|link_to_function)\([\'|\"]([^\'|\"|\,|\)]*)
```

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

## #6 — webbo, 2012-07-15T13:08Z

> **[Aisee skrev:](https://www.webforum.nu/p/1551849)**
>
> Testa med
>
>
> ```
> (mail_to|link_to|link_to_function)\([\'|\"]([^\'|\"|\,|\)]*)
> ```

Tack Aisee, det fungerar bra!

Om jag nu även vill ta till vara på den andra parametern, hur ska mitt regexp se ut då?

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

## #7 — webbo, 2012-07-15T16:08Z

Någon?

Jag vill alltså söka rätt på alla förekomster av funktionsanropen mail_to, link_to och link_to_function i en lång textsträng och få tag i anropens parametrar (kan vara en eller två parametrar per anrop).

Exempel:

```php
$str = "Bla bla bla <?php echo link_to('test', 'test2') ?> bla bla bla <?php echo link_to_function('hej', 'hej2') ?> bla bla bla...";

preg_match_all
(
    ?,
    $str,
    $matches
);
```

Ska alltså returnera:

```php
$matches = array
(
  [0] => array
  (
    [0] => "link_to('test', 'test2')"
    [1] => "link_to_function('hej', 'hej2')"
  )
  [1] => array
  (
    [0] => "test"
    [1] => "hej"
  )
  [2] => array
  (
    [0] => "test2"
    [1] => "hej2"
  )
)
```

Parametrarna (en eller två per anrop) kan vara omgärdade av antingen enkelfnutt ' eller dubbelfnutt ". Innanför fnuttarna ska alla tecken vara tillåtna.

Hur ska mitt regexp se ut?

Tack för hjälpen!

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

## #8 — webbo, 2012-07-16T13:55Z

Ingen som vet?

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

## #9 — webbo, 2012-07-17T19:58Z

Jag har kommit så här långt:

```
$regexp = "/(mail_to|link_to|link_to_function)\((\'|\")(.*?)(\'\)|\"\)|\'\,|\"\,)/";
```

men hur gör jag för att även ta reda på den andra parametern, om en sådan finns dvs...?

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

## #10 — webbo, 2012-07-18T07:40Z

Jag lyckas inte lösa detta själv... Ingen här på wf som har koll på regexp av denna typ?

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

## #11 — voigtann1, 2012-07-18T08:32Z

Känns som du få göra två regex uttryck om du nu skall ha fler parameter eller få du väl splitar parametern på , och jobba med den

Få kolla på det när jag sitter vid en dator

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

## #12 — webbo, 2012-07-18T10:12Z

> **[voigtann1 skrev:](https://www.webforum.nu/p/1552405)**
>
> Känns som du få göra två regex uttryck om du nu skall ha fler parameter eller få du väl splitar parametern på , och jobba med den

Tack för ditt svar, äntligen någon som besöker PHP-forumet ;) 

Borde väl gå att få det i en och samma regexp tycker jag... Det kan vara fler än två parametrar men det är bara de två första jag är ute efter.

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

## #13 — webbo, 2012-07-18T11:41Z

Kan det här vara något kanske?

```
$regexp = "/(mail_to|link_to|link_to_function)\((\'|\")(.*?)(\'\)|\"\)|\'\,|\"\,)((.?)(\'|\")(.*?)(\'|\"))?/";
```

Tycks funka, men borde gå att göras snyggare?

Nu blir det en väldigt lång resultat-array ($matches). Kan man rensa den lite kanske? Eller i alla fall bestämma ordningen?

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

## #14 — voigtann1, 2012-07-18T18:24Z

nu kan jag inte php så extremt bra men vad har du för sträng för att testa? men ditt uttryck är jätte stor och omständig, kan du ge ett exempel på kod och vad du vill få för resultat på  $matches? är det alltid 2 parameter i mail_to link_to link_to_function? eller hur vill du egentligen att man skall få ut varje matchning, tror inte det gå att få det dynamiskt men:

```
<?php
$str = "Bla bla bla <?php echo link_to('test', 'test2') ?> bla bla bla <?php echo link_to_function('hej', 'hej2') ?> bla bla bla...";
$var = "['\"](.*?)['\"]";
$para = "(?:".$var."(?:, ?".$var.")?)";
$regexp = "/(?:mail_to|link_to|link_to_function)\(".$para."\)/";
preg_match_all
(
    $regexp,
    $str,
    $matches
);

echo '<pre>';
print_r($matches);
echo '</pre>'; 
?>
```

 Ge dig:

```php
Array
(
    [0] => Array
        (
            [0] => link_to('test', 'test2')
            [1] => link_to_function('hej', 'hej2')
        )

    [1] => Array
        (
            [0] => test
            [1] => hej
        )

    [2] => Array
        (
            [0] => test2
            [1] => hej2
        )

)
```

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

## #15 — webbo, 2012-07-29T11:16Z

Tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/189856-preg-match-all-hur-ska-mitt-regexp-se-ut
