【问题标题】:Perl LWP Find links in page that contain a specific wordPerl LWP 在页面中查找包含特定单词的链接
【发布时间】:2014-07-17 16:12:59
【问题描述】:

我真的被困住了。 我正在使用 LWP。 我希望将 HTML 文档中的特定链接推送到数组中。 但是:

while ($edocument =~ m/href\s*=\s*"([^"\s]+)"/gi) {
#dostuff
}

将处理所有链接。 我只想要 url 中包含“test”一词的链接。

我尝试过各种组合,比如。 (太多尝试列出)

  while ($edocument =~ m/href\s*=\s*"([^"\s*test*]+)"/gi) {

我一直在阅读和阅读,对于这种尴尬的情况,我真的需要一个线索。

有人可以帮忙吗?

此外,我也只需要匹配每个$edocument 的单词 test。有点像last 我猜是循环。

也尝试过

@links = $edocument =~ m/<a[^>]+href\s*=\s*["']?([^"'> ]+)/ig;

然后通过一个独特的 sub 运行 @links。但是,仍然只需要带有“测试”一词的链接。

【问题讨论】:

  • 我正在尝试解决这个问题。我知道什么 \s 和 * 但是,为什么会发生匹配?我阅读了像 href[space]*=[space]*"[space]* 这样的正则表达式 我试图在任何地方找到这个正则表达式的解释,所以我可以有足够的线索来自己扩展它。
  • 几小时后,我的尝试仍然失败。在休息。希望有人会很快在这里插话并提供帮助。提前谢谢..

标签: match lwp


【解决方案1】:

下面的正则表达式呢:

while ($edocument =~ m/href\s*=\s*"([^"\s]+test[^"\s]+)"/gi) { #dostuff }

这个正则表达式只匹配带有子字符串 test 的 url。

【讨论】:

  • 谢谢.. 我正在尝试.. 另外,如果我想做一个 10 位数的号码检查,这可行吗? m/href\s*=\s*"([^"\s]+[0-9a-z]{10}[^"\s]+)"/gi)
  • 如果您只想匹配 10 位数字,则必须从您的正则表达式中删除“a-z”部分。以下正则表达式应该可以仅选择其中包含 10 位数字的网址: m/href\s*=\s*"([^"\s]+\d{10}[^"\s]+) "/gi)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2021-03-11
  • 2019-07-15
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多