Jump to content
mstdmstdd

Get list of images

Recommended Posts

  Hello!
Есть строка я рядом картинок где формат последней картинки отличается

 

Edit by Psycho: Translation: There is a line next to the pictures where the format of the last picture differs

$str= ‘ <figure class="article-body-content-main-photo full-width">
<img sizes="(max-width: 800px) calc(100vw - 20px), (max-width: 1280) 55vw, 700px" srcset= "//site.com/article-leads-horizontal-261/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 261w, //site.com/article-leads-horizontal-437/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 437w, //site.com/article-leads-horizontal-800/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 800w, //site.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 700w, //site.com/article-leads-horizontal-1400/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 1400w, " src="//site.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png" alt="" />’;

And using preg_match_all with

$pattern = '~
//[\s]* # symbol with possible backspace
([\w\.\/\-]+) # get list of images of article from next article html
(?:
[\s]*
([\w]+) #get dimention size of image
[\s]*
)
| # condition for last image
"
~isx';

I got results:
 

[0] => Array
(
[0] => //img.wennermedia.com/article-leads-horizontal-261/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 261w
[1] => //img.wennermedia.com/article-leads-horizontal-437/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 437w
[2] => //img.wennermedia.com/article-leads-horizontal-800/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 800w
[3] => //img.wennermedia.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 700w
[4] => //img.wennermedia.com/article-leads-horizontal-1400/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png 1400w
[5] => "
[6] => "
[7] => //img.wennermedia.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[8] => "
)

[1] => Array
(
[0] => img.wennermedia.com/article-leads-horizontal-261/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[1] => img.wennermedia.com/article-leads-horizontal-437/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[2] => img.wennermedia.com/article-leads-horizontal-800/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[3] => img.wennermedia.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[4] => img.wennermedia.com/article-leads-horizontal-1400/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.png
[5] =>
[6] =>
[7] => img.wennermedia.com/article-leads-horizontal/screen-shot-2017-06-19-at-23406-pm-73259c31-a395-463b-8eaa-bf4f9152d9aa.pn
[8] =>
)

[2] => Array
(
[0] => 261w
[1] => 437w
[2] => 800w
[3] => 700w
[4] => 1400w
[5] =>
[6] =>
[7] => g
[8] =>
)

All images got ok, but last not.
Which is the valid way ?

Thanks!

Edited by Psycho

Share this post


Link to post
Share on other sites

For the reader:  first line is "There is a line i next to the pictures where the format of the last picture differs".

  • Like 1

Share this post


Link to post
Share on other sites

@mstdmstdd

 

Not sure I understand your problem. There are six (6) images in the content if the variable $str and there are six images in your result array. Is your problem the fact that "g" is returned as the 2nd parameter for the last image? There is no dimension in the source for that image, so you won't get back a valid dimension anyway. Are you just wanting to get an empty value for that then?

 

EDIT: Ah, sorry, I now see the "g" was being stripped off the end of the image name.

Edited by Psycho

Share this post


Link to post
Share on other sites

I'm sure your expression can be written more simply. But, your problem can be resolved by removing all the line-breaks, spaces and comments you used to help make the expression easier to read. You can always add several PHP comment lines before or after the expression definition to explain the different parts of the expression.

$pattern = '~//[\s]*([\w\.\/\-]+)(?:[\s]*([\w]+)[\s]*)*| "~isx';
Edited by Psycho
  • Like 1

Share this post


Link to post
Share on other sites

Thank you for your explanations!

But did you mean that this way of pattern 

$pattern = '~
//[\s]* # symbol with possible backspace
([\w\.\/\-]+) # get list of images of article from next article html
(
[\s]*
([\w]+) #get dimention size of image
[\s]*
)*
| # condition for last image
[\s]"
~isx';

with x key can bring to wrong working of expression ?

Share this post


Link to post
Share on other sites

Did you remove the "?" from your pattern in your second post?

 

At any rate, he's right, it works with $pattern in a single line as he typed it.

 

I think this might be what got you:

 

Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.