2009-08-17 16 views
1

Jungs, das wird wahrscheinlich ziemlich einfach sein, aber wie kann ich alle Übereinstimmungen mit Regex dieses Vorkommens in einer Ladung Text finden.Eine andere PHP Regex Frage

[[data in here]] 

Beispiel:

Blah blah blah [[find]] and maybe [[this]] 

So bin ich in der Lage, das Auftreten zu finden und sie dann als Urls ersetzen.

Macht das Sinn?

Ich versuchte

preg_match_all("/[[([^<]*)]]/", $data, $matches, PREG_OFFSET_CAPTURE); 

Aber gibt Fehler verwenden. Irgendwelche Ideen? :)

+1

'[' und ']' sind Sonderzeichen in regulären Ausdrücken und müssen daher mit '\\' versehen werden. – cdmckay

Antwort

5

Try this:

preg_match_all("/\[\[(.+?)\]\]/", $data, $matches, PREG_OFFSET_CAPTURE); 
+0

Fantastisch, danke. – James

+0

Gibt es einen Vorteil zu verwenden. +? über. * oder ist es nur Vorliebe? Ich kann mir keine Situation vorstellen, in der sie sich unterscheiden würden. – camomileCase

+0

. * = Entspricht einem beliebigen Zeichen, 0 oder mehrmals, so oft wie möglich –

0

Vielleicht ....

"/\[.*\]/" 

? Nur eine wilde Vermutung.

Ich denke, Ihr grundlegendes Problem ist, dass Sie die Klammern '[]', da sie besondere Zeichen sind, müssen.

0

Sie müssen die '[' und ']' Zeichen zu entkommen - sie Sonderzeichen in regex sind. Du bist wahrscheinlich am besten dran tun dies mit preg_replace_callback()

function makeURL($matches) { 
    $url = $matches[1]; 
    return "<a href=\"http://$url\">$url</a>"; 
} 

$data = 'My website is [[www.example.com]].'; 

echo preg_replace_callback('/\[\[(.*?)\]\]/', 'makeURL', $data); 

// output: My website is <a href="http://www.example.com">www.example.com</a> 

Sie die makeURL() Funktion optimieren können, um die URL neu schreiben Sie jedoch bitte.

0

[ und ] haben Bedeutung in regulären Ausdruckssyntax. Um ihnen zu entsprechen, müssen Sie sie mit dem Zeichen \ "entkommen". So Ihr regulärer Ausdruck wäre:

"/\[\[(.+?)\]\]/" 

Die Nutzung der [ und ] Zeichen und wie sie zu entkommen ist ziemlich einfach regulärer Ausdruck Wissen. Nicht, um unhöflich zu sein, aber ich schlage vor, ein wenig mehr Zeit damit zu verbringen, reguläre Ausdrücke zu lernen, bevor Sie irgendwelche für Produktionscode schreiben.