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:
// 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
<?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>';
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 "
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:
$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
);
Parametrarna (en eller två per anrop) kan vara omgärdade av antingen enkelfnutt ' eller dubbelfnutt ". Innanför fnuttarna ska alla tecken vara tillåtna.
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>';
?>