Reputation: 1625
I want to write a regex that only capture patterns that has /assets/img/myfolder/
for example, this string should get captured :
<img src="/assets/img/myfolder/abc0001.jpg">
and this should not get captured :
<img src="/assets/img/otherfolder/abc0002.jpg">
below is what i tried, but since I hate regex and suck at it, it doesn't capture any patterns at all:
https://regex101.com/r/sxY6OX/2
Upvotes: 0
Views: 44
Reputation: 59
<?php
$input_lines = <<<EOD
<img src="/assets/img/myfolder/abc0001.jpg">
<img src="/assets/img/otherfolder/abc0002.jpg">
<img src="/assets/img/myfolder/abc0001=2.png">
EOD;
preg_match_all("/(<img\s+src=\s*[\"\\']\/assets\/img\/myfolder\/\S*\.(?:png|jpg)[\"\\']>)/i", $input_lines, $output_array);
print_r($output_array);
Result:
Array
(
[0] => Array
(
[0] => <img src="/assets/img/myfolder/abc0001.jpg">
[1] => <img src="/assets/img/myfolder/abc0001=2.png">
)
[1] => Array
(
[0] => <img src="/assets/img/myfolder/abc0001.jpg">
[1] => <img src="/assets/img/myfolder/abc0001=2.png">
)
)
And fixed your pattern on regex101.com
preg_match_all("/(<img\s+src=\s*[\"\\']\/assets\/img\/tinymce\/\S*_thumb\.(?:png|jpg)[\"\\']>)/i", $input_lines, $output_array);
Upvotes: 1
Reputation: 424
I fixed your regex:
https://regex101.com/r/sxY6OX/4
you missed the part to match for the thumb name [a-z0-9]*?_thumb
Before:
(<img\s+src\s*=\s*[\"\'](\/assets\/img\/tinymce\/))[a-z0-9]*?_thumb(\.(png|jpg)[\"\']>)
After:
(<img\s+src\s*=\s*[\"\'](\/assets\/img\/tinymce\/)\s)(_thumb)(\.(png|jpg)[\"\']>)
Upvotes: 1