Regex von bis

OnDemand

Top Contributor
Hallo zusammen,

hab in meinen Texten Links, die ich raus möchte.

Text text text <a href=&quot;http://......com/-sensor/>Linktext</a> text text text
Möchte alles von <a bis /a> mit einem Leerzeichen ersetzen.
Die Links sind aber verschieden. Hat jemand ne Idee wie das geht? mit Regex hab ich noch nie gearbeitet. Wird nun mal Zeit.
Ist regex das richtige? ReplaceAll auf den String wird ja nicht klappen, da jedesmal anderer Link
 
Also erst einmal nimmt replaceAll ein Regex...

Dann kannst Du natürlich nach etwas suchen wie "<a>.*</a>", aber das Problem hier ist, dass .* "greedy" ist, d.h. er nimmt so viel es nur geht. Hast Du also mehrere Links, dann nimmt er alles.

Somit muss man dieses "greedy" ausschalten:
<a>.*?</a>

Und der / braucht natürlich noch ein Escape Zeichen:
<a>.*?<\/a>

Schau einfach mal unter:
 
mrBrown hast Recht... da wird ne Lücke entstehen die dann relativ bekloppt und sinnlosen Satz erzeugt 😀
@kneitzel geiles tool!! Vielen Dank das geht direkt in die Favoriten
 
Zumindest das regex101 Tool wollte es so haben.

Und man kann den Regulären Ausdruck natürlich noch beliebig aufbohren, so dass dann z.B. nur <a..> und </a> entfernt werden.
Da kann man dann auch noch schauen - whitespace sind da ja auch denkbar zwischen den Zeichen meine ich, also ein < / a > ist ebenso gültig ...

Also etwas in der Art würde den Text des Links als Text stehen lassen:
<\s*a\s+.*?>|<\s*\/\s*a\s*>

Bezüglich des ersten Vorschlags:
Dabei ist dann wichtig, dass nach dem a noch ein Leerzeichen kommt. Und ich habe oben natürlich nur auf <a> gematcht und da müssen ja noch Attribute dazu ... Das > müsste also weg und durch ein \s+ ersetzt werden. Aber letzteres gefällt mir besser.

Also um den Text des Links stehen zu lassen:
<\s*a\s+.*?>|<\s*\/\s*a\s*>
Und um den Text ebenfalls zu entfernen:
<\s*a\s+.*?>.*?<\s*\/\s*a\s*>
 

Zurück
Oben