2017-02-24 2 views
0

Hallo Ich versuche, ein replaceAll in Java zu verwenden, einige HTML-Inhalt von Bild zu löschen:Ersetzen Regex Variable

Das ist mein Eingang

String html = '&nbsp;asd<i>&nbsp;qwe qwe<u>qweqwe</u></i><u>wqeqwesd.<img alt="vechile" src="urldirectionstring" style="float:left; height:190px; width:400px" /></u>'; 

Also, was ich versuche zu tun ist ersetzen sie alle Inhalte von <img ...> und zurück nur in ersetzen diese:

"Image Url: urldirectionstring"; 

So ersetzen sie einfach den Tag img, alles andere, lassen sie es, dieses Tag nur berühren, und jetzt habe ich das, aber es ist nicht enougth;

String replaceImg = html.replaceAll("<img[^>]*/>","Image Url: "+$srcImgdirection); 

So, wie Sie sehen können, ich habe keine Ahnung, wie in der ersetzt den urldirectionstring als Variable zu erhalten.

----------- Das letzte Mal bearbeitet -----------

fand ich diese Regex die urlstringdirection zu bekommen, aber jetzt weiß ich nicht, wie zu ersetzen es nur und fügen Sie den Text:

String replaceImg = html.replaceAll("<img.*src="(.*)"[^>]*/?>","Image Url: "+$srcImgdirection); 
+1

sind Sie sich bewusst, dass es Bibliotheken für richtig HTML Parsing und regex sind nicht sehr geeignet für die Aufgabe? –

+1

Ich stimme Patrick zu, aber für die zukünftige Anwendung von 'replaceAll()': Sie können auf die einfangenden Gruppen im Ersetzungsstring zugreifen über '$ group_number', .eg' replaceAll ("src = \" ([^ \ "] *) \ "", "src = \" Präfix $ 1suffix \ "") um den Attribut-Inhalt mit "" Präfix "und" "Suffix". – Thomas

+2

Allerdings wies bereits Patrick darauf hin, dass reguläre Ausdrücke nicht gut für unregelmäßige passen Sprachen wie hmtl (zB was passiert mit verschachtelten Tags?), es sei denn, Sie wissen _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _^Um das zu beheben, könnte man den Quantifizierer nur widerwillig machen (dh '. *?'), um so wenig wie möglich zu entsprechen, aber die nächste Frage wäre: Was wäre, wenn es Bild-Tags ohne 'src'-Attribut gibt oder wo der Wert von umgeben ist einfache Anführungszeichen anstelle von Anführungszeichen? usw. usw. usw. – Thomas

Antwort

1

Sie verwenden:

String replaceImg = html.replaceAll(".*<img.*src=\"(.*?)\".*", "Image Url: $1"); 

Dies ersetzt die gesamte Zeichenfolge und der Ausgang nur Image Url: urldirectionstring (beachten wäre, dass $1 die Zeichenfolge im Express abgestimmt enthält Ion, aber nur der Teil innerhalb der Klammer - im Grunde jedes Klammerpaar erstellt "Gruppen", die später referenziert werden können; wie die Regex nur ein Paar enthält, das ist die erste Gruppe, so können Sie es mit $1)

Referenz Wenn Sie nur den img-Tag ersetzt werden sollen und die andere Tags intakt halten, könnten Sie verwenden:

String replaceImg = html.replaceAll("<img.*src=\"(.*?)\"[^>]*/?>", "Image Url: $1"); 

In diesem Fall wird der Ausgang sein: &nbsp;asd<i>&nbsp;qwe qwe<u>qweqwe</u></i><u>wqeqwesd.Image Url: urldirectionstring</u>