Как использовать RegEx для фильтрации ссылок из HTML-документа?
Как получить определенные ссылки в документе с помощью регулярных выражений? У меня есть HTML-файл, который содержит ссылки на диск Google, смешанный с кучей HTML-кода и других вещей. Я пытаюсь получить 50 ссылок из текста, найдя их все, используя RegEx для поиска по ключевым словам, которые у них общие. drive, google, & sharing
Пример:"https://drive.google.com/file/d/1wXbzf0nvddZ0vlz6-fdN7HV/view?usp=sharing"
Я хочу выбрать начало и конец ссылок, а затем иметь возможность скопировать их все, вставить их в другой файл или стереть другой контент и просто сохранить эти ссылки в HTML-документе.
я пытался
http\:\/\/www\.[a-zA-Z0-9\.\/\-]+ & `.*?(http\:\/\/www\.[a-zA-Z0-9\.\/\-]+)`
Я попробовал диск, который привел к тому, что ничего не нашел, но http & www показывает результаты других ссылок в файле, на которые я не пытаюсь попасть, но, по крайней мере, показывает некоторые результаты, вместо того, чтобы идти по определенным ключевым словам, которые я перечислил.
Я не уверен, что это правильный способ сделать это, и если я должен использовать другой метод, такой как JavaScript, чтобы достичь этого и т. Д. И т. Д.
Я использую Sublime Text на Mac, чтобы попытаться понять это. Я новичок в регулярных выражениях.
2 ответа
Следующее должно работать:
.*drive.google.com.*sharing
.
означает любой персонаж*
Персонаж до может появиться несколько раз
Похоже, вы пытаетесь сделать это в каком-то редакторе в Mac, но вопрос помечен как "perl", так что вот один из способов сделать это в Perl.
Во-первых, полезно иметь полный пример ввода и вывода, чтобы убедиться, что мы понимаем желаемое поведение, поэтому вот пример ввода test.doc:
<p>https://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing</p><br /><p>https://drive.google.com/sharing/oSmNg0pNzRjWEFyNDRzam8/view?usp=sharing<br /></p></div>
<p>http://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing</p><br/><p>https://drive.google.com/file/sharing/view?usp=sharing<br /></p></div>
https://drive.abc.com/file/d/efg/view?usp=sharing
https://drive.apple.com/file/d/abc/efg/view?usp=sharing
https://drive.google.com/file/d/xyz/skipme?usp=sharing https://drive.google.com/file/d/ef/view?usp=sharing
Я предполагаю, что ссылки заключены в пробел или теги *ml <> здесь. Вот одна строка Linux, которая примет входной файл test.doc и выдаст соответствующие HTML-ссылки. [^\s<>]+
часть будет захватывать один или несколько символов, которые не являются пробелами \s
или же <>
(то есть отрицательный класс символов из-за [^
), чтобы предотвратить его запуск и сопоставление нескольких ссылок на одной строке:
perl -ne '@m = $_ =~ m{(https?://drive\.google\.com/[^\s<>]+view\?usp=sharing)}g; print "$_\n" for @m;' test.doc
Это даст следующий вывод:
https://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing
https://drive.google.com/sharing/oSmNg0pNzRjWEFyNDRzam8/view?usp=sharing
http://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing
https://drive.google.com/file/sharing/view?usp=sharing
https://drive.google.com/file/d/ef/view?usp=sharing
Если вышеупомянутое не совсем соответствует тому, что вам нужно, тогда, пожалуйста, дайте другой фрагмент текста ввода / вывода, и кто-то может подсказать, как бы вы изменили однострочник, чтобы он соответствовал.