0

使用 grep/regex,我试图从文件中提取 img 标签。我只想要源中包含“photobucket”的 img 标签,而不想要不包含 photobucket 的 img 标签。

想:

<img src="/photobucket/img21.png">

不要:

<img src="/imgs/test.jpg">
<img src="/imgs/thiswillgetpulledtoo.jpg"><p>We like photobucket</p>

我试过的:

(<img.*?photobucket.*?>)

这不起作用,因为它拉出了“Do Not Want”中的第二个示例,因为有一个“photobucket”,然后是一个右括号。我怎样才能只检查“photobucket”直到第一个右括号,如果不包含 photobucket,忽略它并继续?

'photobucket' 可能位于字符串中的不同位置。

4

4 回答 4

2
grep -o '<img[^>]*src="[^"]*photobucket[^>]*>' infile

-o仅返回匹配项。分开:

<img          # Start with <img
[^>]*         # Zero or more of "not >"
src="         # start of src attribute
[^"]*         # Zero or more or "not quotes"
photobucket   # Match photobucket
[^>]*         # Zero or more of "not >"
>             # Closing angle bracket

对于输入文件

<img src="/imgs/test.jpg">
<img src="/imgs/thiswillgetpulledtoo.jpg"><p>We like photobucket</p>
<img src="/photobucket/img21.png">
<img alt="photobucket" src="/something/img21.png">
<img alt="something" src="/photobucket/img21.png">
<img src="/photobucket/img21.png" alt="something">
<img src="/something/img21.png" alt="photobucket">

这返回

$ grep -o '<img[^>]*src="[^"]*photobucket[^>]*>' infile
<img src="/photobucket/img21.png">
<img alt="something" src="/photobucket/img21.png">
<img src="/photobucket/img21.png" alt="something">

非贪婪.*?仅适用于-P选项(Perl 正则表达式)。

于 2016-01-19T17:18:11.577 回答
2

只需添加一个否定>符号:

(<img[^>]*?photobucket.*?>)

https://regex101.com/r/tZ9lI9/2

于 2016-01-19T17:08:54.617 回答
0

尝试以下操作:

<img[^>]*?photobucket[^>]*?>

这样正则表达式就不能通过'>'

于 2016-01-19T17:06:44.637 回答
0

试试这个模式:

<img.*src=\"[/a-zA-Z0-9_]+photobucket[/a-zA-Z0-9_]+\.\w+\".*>

我不确定名称文件夹承认的字符,但您只需要在“photobucket”之前和之后添加范围“[]”。

于 2016-01-19T17:07:50.630 回答