Как использовать RegEx для фильтрации ссылок из HTML-документа? - PullRequest
0 голосов
/ 05 ноября 2018

Как получить определенные ссылки в документе с помощью регулярных выражений? У меня есть HTML-файл, который содержит ссылки Google Drive, смешанный с кучей 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 ]

0 голосов
/ 05 ноября 2018

Похоже, вы пытаетесь сделать это в каком-то редакторе в 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

Если вышеупомянутое не совсем соответствует тому, что вам нужно, тогда, пожалуйста, дайте другой фрагмент текста ввода / вывода, и кто-то может подсказать, как бы вы изменили однострочник, чтобы он соответствовал.

0 голосов
/ 05 ноября 2018

Должны работать следующие:

.*drive.google.com.*sharing
  • . означает любой символ

  • * Символ перед может появляться несколько раз

...