Hm, okay
Du hast diesen regulären Ausdruck:
$pattern = '=^(.*)<a(.*)href\="?(\S+)"([^>]*)>(.*)</a>(.*)$=msi';
Die von mir markierten Teile gehören nicht zum eigentlich Ausdruck. Das Gleichheitszeichen am Anfang gibt an, dass "=" Anfang und Ende des Ausdrucks markiert. Im zweiten markierten Bereich kommt erst das =-Zeichen (also die Endmarkierung) und dann kommen Modifier. "m" steht für Multiline, "s" für Singleline (hört sich erstmal widersprüchlich an, einmal kurz googlen wird Dir aber erklären, was die bedeuten), und "i" für IgnoreCase. Damit das "=" in der Mitte des Ausdrucks nicht als Ende erkannt wird, wird es mit einem "\" davor escaped.
Nun bei C#: Hier müssen Anfang und Ende nicht markiert werden, weil die Modifier nicht mit im String stehen. Der Ausdruck ist dann einfach der gesamte String, ohne irgendwelche Gleichheitszeichen oder Modifier. Pass aber auf, Du wirst Probleme mit den Anführungszeichen bekommen, weil die in C# ja auch einen String einleiten bzw. beenden. Ein regulärer Ausdruck wird in C# zum Beispiel so erstellt:
C#-Quelltext
1:
| var rx = new Regex("(.*?)", RegexOptions.IgnoreCase | RegexOptions.SingleLine); |
Die Schleife würde ich, wie gesagt, nicht so übernehmen. Die macht im Prinzip folgendes: Die sucht in einem Text nach einem Link. Wird dieser gefunden, wird der Link im Text durch "hier war mal ein Link" ersetzt und der Text wird erneut ganz von vorne durchsucht. Das ist absolut suboptimal. Viel sinnvoller wäre es ja, den Text von vorne bis hinten zu untersuchen und alle Links zu finden, ohne was zu ersetzen. Dazu muss man den Regex ein bisschen umändern, aber das überlasse ich erst einmal Dir
In C# macht man das so:
C#-Quelltext
1:
| var matches = rx.Matches(deinTextMitLinksDrin); |
Mit einer foreach-Schleife kannst Du dann die einzelnen Matches durchlaufen:
C#-Quelltext
1:
| foreach(Match m in matches) |
Jeder Match
m enthält ein Array mit den Unter-Matches (also in Deinem Regex oben wird ja z.B. die URL nochmal selber in einen Unter-Regex gepackt), abrufbar ist dieses Array über
m.Groups.
m.Groups[0] enthält den kompletten Regex,
m.Groups[1] den ersten Unter-Match usw.
Soooo, und zum Abschluss noch der Link zu einem kleinen aber IMHO sehr guten Tutorial zu Regexen:
tut.php-quake.net/de/regex.html Hier wird zwar wieder PHP verwendet, die regulären Ausdrücke funktionieren bis auf die Modifier aber identisch.
Grüße
Christian
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".