正则表达式只捕获JPG图像

我在PHP中有这个正则表达式:</ p>

  $ regex =  “/<img[^>]*'.'src=\"|\'[\"|\']/Ui';

它捕获字符串中的所有图像标记源,但我只想捕获JPG文件。 我试图搞砸(。*),但我只是证明我吮吸正则表达式...现在我正在过滤数组,但感觉太像黑客了,我可以直接用它做 正确匹配。</ p>
</ div>

展开原文

原文

I have this regex in PHP:

$regex = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';

It captures all image tag sources in a string, but I want to only capture JPG files. I've tried to mess around with (.*) but I've only proven that I suck at regex... Right now I'm filtering the array but feels too much like a hack when I can just do it straight up with a proper match.

dragon8837
dragon8837 句点*字符只是说搜索任何字符0次或更多次,直到你匹配一个引号。与文件扩展名无关,因为它可能出现!
接近 11 年之前 回复
doumu1212
doumu1212 我通过cURL拉网页然后搜索<img>标签来获取它的源文件。
接近 11 年之前 回复
doulu4534
doulu4534 通常,无法根据其URL来分辨资源的内容类型。
接近 11 年之前 回复
dpnw86361
dpnw86361 什么样的图像标签?你在过滤什么?
接近 11 年之前 回复

6个回答



试试这个:</ p>

  $ regex ='/&lt; img([^  &gt;] *)?src = [\“\']([^ \”\'] * \ .jpe?g)[\“\'] / Ui'; 
</ code> </ pre> \ n

我还删除了不需要的字符类中的额外 | </ code>。</ p>
</ div>

展开原文

原文

Try this:

$regex = '/<img ([^>]* )?src=[\"\']([^\"\']*\.jpe?g)[\"\']/Ui';

I also removed the extra | in the character classes that was not needed.

douyuan1049
douyuan1049 你正在用“不要使用正则表达式来解析HTML”来向合唱团讲道。 :p :)
接近 11 年之前 回复
dtr53557
dtr53557 这甚至不涉及整个“非常规语言”问题,HTML注释,<pre>区域,嵌入式脚本中的字符串等。将HTML解析为HTML解析器,这就是他们的工作,以及 有足够的。
接近 11 年之前 回复
dongqi8114
dongqi8114 <img alt =“我的形象”src =“a.jpeg”>。
接近 11 年之前 回复
du9843
du9843 我修复了正则表达式,因此它也匹配“jpeg”,并且与标签“imgetjpeg”或属性“classrc”(通过适当添加空格)不匹配。
接近 11 年之前 回复
doucu7525
doucu7525 这打破了,例如 在<img alt =“1 >> epsilon”src =“graph.jpeg”>或<pre> <IMgetJPEG classrc =“rc.jpeg”> ....
接近 11 年之前 回复
dongnai1876
dongnai1876 我看不到| 接得好!
接近 11 年之前 回复
doulu7174
doulu7174 谢谢,这就是诀窍。
接近 11 年之前 回复



首先,使用HTML解析器获取所有 img </ code>标记。 然后,将那些 src </ code>属性的值与正则表达式 \。(jpeg | jpg)$ </ code>匹配。</ p>

例如, 使用此解析器:</ p>

  $ html = file_get_html(  'http://nample.foo.org/bar.html');
foreach($ html-&gt; find('img')as $ img){
if(preg_match(“\。(jpeg | jpg) $“,$ img-&gt; src){
//保存$ img或$ img-&gt; src或您需要的任何内容
}
}
</ code> </ pre>

< p> 编辑:</ em>我缩短了正则表达式。你也可以使用 \ .jpe?g $ </ code>。</ p>
</ div>

展开原文

原文

First, get all img tags with an HTML parser. Then, take those whose src attribute's value is matched by the regex \.(jpeg|jpg)$.

For example, using this parser:

$html = file_get_html('http://example.foo.org/bar.html');
foreach ($html->find('img') as $img) {
    if (preg_match ("\.(jpeg|jpg)$", $img->src) {
        //save $img or $img->src or whatever you need
    }
}

Edit: I shortened the regular expression. You can also use \.jpe?g$.

duanqiao8925
duanqiao8925 谢谢,我会调查一下。 快速查看确实显示它使用了fopen - 我已经禁用并且测试了比cURL更不可靠我的使用。
接近 11 年之前 回复



尝试:</ p>

  $ regex ='/&lt; img [^&gt;  ] '。'src = [\“| \'](。 [。] jpg)[\”| \'] / Ui'; 
</ code> </ pre>
</ div>

展开原文

原文

Try:

$regex = '/<img[^>]*'.'src=[\"|\'](.*[.]jpg)[\"|\']/Ui';



您必须小心逃避'</ code>,因为您将它用作PHP分隔符。 </ p>

同时搜索以 .jpg </ code>或 jpeg </ code>结尾的文件。 </ p>

  $ regex ='/<img[^>]*src="\'\ .(jpg | jpeg  )[“\'] [^&gt;] *&gt; / Ui'; 
</ code> </ pre>
</ div>

展开原文

原文

you have to be careful to escape ' since you are using it as PHP delimeter.

Also searching the file which end by .jpg or jpeg would make it.

$regex = '/<img[^>]*src=["\']([^\'"]*)\.(jpg|jpeg)["\'][^>]*>/Ui';

douxin1163
douxin1163 没问题
接近 11 年之前 回复
dsu89430
dsu89430 抱歉,那个。 这是我第一次来这里,我忘了把它作为代码引用。
接近 11 年之前 回复



只需在结束引号之前搜索.jpg我相信</ p>

   $ regex ='/&lt; img [^&gt;] '。'src = [\“| \'](。 \。jpg)[\”| \'] / Ui'; 
</ code> </ pre>
</ div>

展开原文

原文

Just need to search for the .jpg before the closing quotes I believe

$regex = '/<img[^>]*'.'src=[\"|\'](.*\.jpg)[\"|\']/Ui';

dsqpx86002
dsqpx86002 对不起,我只是将.jpg附加到您的代码而不进行测试。 我做了一些编辑,虽然似乎有一些更好的选择;)。
接近 11 年之前 回复
douqingnao9246
douqingnao9246 这似乎不起作用,print_r显示该数组具有整个标记 - “<img src =”blahblah“> - 作为值。
接近 11 年之前 回复



你们都忘了标签之间可能有空格&lt; 和img </ p>

所以正确的正则表达式应该以
/&lt; \ s * img </ code> </ p>
</ div>开头

展开原文

原文

You all forgot that tags may have spaces between < and img

So a correct regexp should start with /<\s*img

douhao2153
douhao2153 确实。 使用稳定的HTML解析器是一种更好的方法(即使在某些情况下它可能不是一个选项)
接近 11 年之前 回复
duanchen1937
duanchen1937 是的,这只是HTML解析器已经解决的一个小细节。
接近 11 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐