Regex - Ergebnis zu lang

Tommy57

Erfahrenes Mitglied
Hallo,

ich versuche gerade in einem Text alle Teile rauszufischen, die mit einer Zahl in Klammern anfangen und drei ! enden. Problem ist, dass er mir am Anfang alle Klammern mit rein nimmt, ich will aber nur genau die letzte Klammer.

Code:
(28) (173) (1) Das ist eins!!! (32) (2) Das ist zwei!!! (81) (72) (3) Das ist drei!!!

\([0-9]{1,3}\).*?!!!

Als Ergebnis hätte ich gerne:
(1) Das ist eins!!!
(2) Das ist zwei!!!
(3) Das ist drei!!!

erhalte aber:
(28) (173) (1) Das ist eins!!!
(32) (2) Das ist zwei!!!
(81) (72) (3) Das ist drei!!!

Gruß, Tommy
 

saftmeister

Nutze den Saft!
Das Problem ist, das '.' - also jedes beliebige Zeichen - auch auf '(' und ')' zutreffend ist. Daher musst du es ausklammern. Versuch mal das hier:

Code:
\([0-9]{1,3}\)[^(]*?!!!

Bei mir funktioniert dieses PHP:

PHP:
<?php
$text = '(28) (173) (1) Das ist eins!!! (32) (2) Das ist zwei!!! (81) (72) (3) Das ist drei!!!';

$regex = '/(\([0-9]{1,3}\)[^(]*?\!\!\!)/';

preg_match_all($regex, $text, $matches);

array_shift($matches);

var_dump($matches[0]);
 
Zuletzt bearbeitet:

Tommy57

Erfahrenes Mitglied
Ahh cool, das funktioniert. Ja, das kann man direkt in Notepad++ so reinschreiben und als Regulären Ausdruck verwenden. Danke^^