2016-06-17 15 views
0

Ok, ich habe überprüft und schaute, aber heute ist meine SearchFU nicht stark. Ich habe einen Fehler mit Rückreferenzen in einigen Regex preg_replace('~$\s*<div>([^<]*?)</div>$\s*~me', '\1', $source); Ich könnte wirklich eine Hand mit. Der Ausdruck findet <div> Tags und gibt nur den Inhalt zurück, der das Tag entfernt und Zeilenumbrüche einschließt. dh:PHP preg_replace Escape Ampersand in Rückreferenz Regex

<td> 
     <div>some value</div> 
    </td> 

wird

<td>some value</td> 

Alles funktioniert, bis <div>&nbsp;</div> Geldbuße, die Ursachen:

Parse error: syntax error, unexpected '&' in D:\wamp\www\processfile.php(18) 
: regexp code on line 1 Call Stack: 0.0010 143600 1. {main}() 
D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace() 
D:\wamp\www\processfile.php:18 Fatal error: preg_replace(): Failed evaluating 
code: in D:\wamp\www\processfile.php on line 18 Call Stack: 0.0010 143600 
1. {main}() D:\wamp\www\processfile.php:0 0.0350 170328 2. preg_replace() 
D:\wamp\www\processfile.php:18 

Wenn ich die \ 1 Rückreferenzierung entfernen, wird der Ausdruck glücklich den gesamten Inhalt in die löschen div-Tags, scheint es aber als neuen Ausdruck analysieren zu wollen.

Gibt es einen Weg, oder sollte ich einfach die & vor der Ausführung dieser Zeile vorverarbeiten?

Antwort

1

Es ist der e Modifikator am Ende Ihrer Regex. Es bewirkt, dass der Ersatz eval() 'ed ist. Entfernen Sie es:

preg_replace('~$\s*<div>([^<]*?)</div>$\s*~m', '\1', $source); 

Siehe PHP docs for PCRE pattern modifiers.

+0

Bam! Vielen Dank. Ich wusste, dass es etwas Einfaches sein würde, das ich übersehen hatte. Ich habe diese Dokumente nun seit 3 ​​Tagen übergossen. – Toaster