3

我在 gawk 中使用 match() 函数从 HTML 文件中获取链接。正则表达式是这样的:

match($0, /(<a href=\")([^\"]+)/, arr)

我似乎无法在最后使用“/g”选项来获得每行多个匹配项?

4

2 回答 2

5

那是对的。AWK 正则表达式没有标志。
此外,没有内置支持match查找第二个或以后的匹配项。
只有gsubandgensub函数有这个。
我会尝试这样的事情:

gensub(/.*<a href=\"([^\"]+)/, "\1%", "g")
last = split($0, "%", arr)
delete arr[last]

where%是您可以保证不会在输入中找到的字符串。

于 2011-05-05T19:25:52.007 回答
1

文本模式浏览器 lynx 可能是收集 URL 的更好工具。它的-dump标志将格式化输出写入标准输出。最后,您会找到该页面上每个可见和隐藏链接的编号列表。(或文件。它接受 URL 或文件名作为参数。)

$ lynx -dump http://www.stackoverflow.com 

[snip]
References

   Visible links
   1. http://stackoverflow.com/opensearch.xml
   2. http://stackoverflow.com/feeds
   3. http://stackexchange.com/
   4. http://stackoverflow.com/users/login
   5. http://careers.stackoverflow.com/
   6. http://chat.stackoverflow.com/
[snip]
 676. http://creativecommons.org/licenses/by-sa/3.0/
 677. http://blog.stackoverflow.com/2009/06/attribution-required/

   Hidden links:
 678. http://www.peer1.com/stackoverflow
 679. http://creativecommons.org/licenses/by-sa/3.0/
于 2011-05-07T20:10:50.023 回答