2016-05-20 6 views
-3
<p[^>]*>([a-zA-Z0-9_\W]*)\:<\/p>.*?(<blockquote[^>]*>).*?<\/blockquote> 

<p> demo demo:</p> <p ><img src="http://demo.com/123.jpg" width="100%"/> <br/> <em>Credit: demo2 demo2 </em></p> <p >here1 here1:</p> <blockquote cite="here1"> <p><em>demo3. demo3 demo3 demo3:</em></p> </blockquote> <p >demo4 demo4:</p> <p ><img src="http://demo.com/1234.jpg" width="100%"/> <br/> <em>demo5 demo 5 demo5</em></p> <p >demo6 demo6:</p> <blockquote cite="demo6"> <p><em>demo7 demo7<br/> 

Das obige Muster funktioniert nicht. Wo kann ich Fehler machen? Das Muster, das ich oben geschrieben habe, ich kann nicht wählen, was ich in einem Satz will. Hilfeanforderung.Ich kann nicht wählen RegEx

Ich will Ergebnisse erhalten:

<p >here1 here1:</p> <blockquote cite="here1"> <p><em>demo3. demo3 demo3 demo3:</em></p> </blockquote> 

I added that I will ask for a sample.

+0

Bitte * Text * Probe enthalten, kein Bild. –

+0

Danke Michael. Ich habe ein Bild hinzugefügt. Wir sehen uns bitte: http://i.stack.imgur.com/UtQQL.png –

+0

und ich füge den Code als Text hinzu. –

Antwort

1

wenn Sie wirklich regex wollen hier verwenden, kann dies für Sie arbeiten:

<p[^>]*>((?:(?!<\/p>).)+)<\/p>\s*<blockquote[^>]*>(.*?)<\/blockquote> 

der relevante Teil ist ((?:(?!<\/p>).)+): Auf Englisch heißt es: "Schauen Sie voraus, um sicherzustellen, dass es keine </p> gibt, dann greifen Sie ein Zeichen und wiederholen Sie dies (bis zum nächsten </p>) ". Auf diese Weise konnten keine mehreren Geschwister <p> 's (oder tatsächlich verschachtelte <p>' s) gefunden werden, was mit Ihrem ursprünglichen Muster passiert: <p[^>]*>([a-zA-Z0-9_\W]*)\:<\/p> stimmt in diesem Zusammenhang falsch überein: <p>one paragraph</p><p>second paragraph</p>. Ich habe auch nur Leerzeichen (\s*, nicht .*?) zwischen der <p> und der <blockquote> angegeben, so dass Sie nur die vor<p> übereinstimmen.

demo

+0

Super. Vielen Dank. –