0

如何使用正则表达式获取文档中的特定链接?我有一个 html 文件,其中包含混合了一堆 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)来实现此等。

我在 Mac 上使用 Sublime Text 来尝试解决这个问题。我是正则表达式的新手。

4

2 回答 2

0

以下应该工作:

.*drive.google.com.*sharing
  • .表示任何字符

  • *前面的字符可以出现多次

于 2018-11-05T13:49:18.007 回答
0

听起来您正试图在 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 one-liner,它将接受输入 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

如果以上内容不能完全满足您的需求,请提供不同的输入/输出文本片段,有人可以插话您如何更改单行以匹配它。

于 2018-11-05T19:23:05.017 回答