Я работал над этим RegEx в течение последнего дня или около того, и я думаю, что у меня все получилось, чтобы он возвращал нужные мне данные. Сначала немного фона.
У меня есть редактор контента, который пользователи смогут редактировать веб-страницы. Они могут форматировать текст, добавлять ссылки и т. Д. Стандартный материал редактора контента. Когда они нажимают сохранить, редактор предоставляет возможность получить контент (editor.Content) и поместить его в строку. Я хочу получить любые ссылки (теги <a>
) и выяснить, являются ли они внутренними или внешними ссылками и являются ли они файлами PDF.
Вот выражение, которое я придумал:
<a\b[^<>]*href\s*=\s*[\""\'](?<domain>https?:\/\/[^\/\s\'\""]*)*\/?(?<path>\/?[^\s\""]+?)?[[>\""\']
С этим я могу разделить домен (если он есть) и путь к нему. Затем я перебираю спички ...
dim matchColl as MatchCollection = Regex.Matches(editorContent, regExString)
For Each m as Match in matchColl
If m.Groups("domain").value <> myInternalDomain and m.Groups("domain").value <> "" then
'this is an external domain... do some stuff
End If
If m.Groups("path").value.EndsWith(".pdf") then
'it is a pdf, do some other stuff...
End if
Next
Мой вопрос заключается в следующем ... части, где я «делаю что-то» со значениями, как лучше всего вернуть это обратно в мою строку «editorContent»? Я мог бы, вероятно, поместить editorContent в StringBuilder и сделать на нем целую кучу замен, но это очень эффективно?
Так, например, в PDF я хочу указать, что он открывается в новом окне (target = "_ blank"), а для внешнего URL-адреса добавить некоторый код JavaScript в атрибут onclick.
Любые идеи будут великолепны!
Спасибо!