답변 3개 / 댓글 13개
1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg
↓
\d+_[a-f0-9]+_\d+x\d+_thumb\.(?:jpe?g|png|gif|bmp|webp)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ PHP Manual > Function Reference > Text Processing > PCRE > PCRE Patterns > Pattern Syntax
- https://www.php.net/manual/en/reference.pcre.pattern.syntax.php
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- https://www.php.net/manual/en/regexp.reference.repetition.php
- https://www.php.net/manual/en/regexp.reference.character-classes.php
- https://www.php.net/manual/en/regexp.reference.escape.php
\d+ ... 숫자 한 글자 이상
[a-f0-9]+ ... abcdef0123456789 한 글자 이상
\. ... 단순 마침표. [그냥 . 하면 모든 문자]
jpe?g ... jpg jpeg 매칭
- https://www.php.net/manual/en/regexp.reference.subpatterns.php
(jpe?g|png|gif|bmp|webp) ... jpg jpeg png gif bmp webp 중 하나
(?:패턴) ... 캡처하지 않음
<?php
$text = '1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg
1644120690_3ff48c23ef6473cee37f_400x300_thumb.png';
preg_match_all('/(\d+)_[a-f0-9]+_(\d+)x(\d+)_thumb(\.(?:jpe?g|png|gif|bmp|webp))/', $text, $matches);
foreach ( $matches[0] as $k=>$filename ) {
$datetime = date('Y-m-d H:i:s', $matches[1][$k]);
$width = $matches[2][$k];
$height = $matches[3][$k];
$extension = $matches[4][$k];
echo '파일명: ', $filename, '<br>';
echo '생성일: ', $datetime, '<br>';
echo '크기: ', $width, 'x', $height, 'px<br>';
echo '확장자: ', $extension, '<br><br>';
}
/* 실행 결과
파일명: 1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg
생성일: 2022-02-06 02:14:09
크기: 190x190px
확장자: .jpg
파일명: 1644120690_3ff48c23ef6473cee37f_400x300_thumb.png
생성일: 2022-02-06 13:11:30
크기: 400x300px
확장자: .png
*/
답변에 대한 댓글 9개
"패턴"이 일치해야 하는데, 맞지 않아서 그렇습니다.
이해 없이 복사&붙여넣기만 하면 쓸 수 없어요.
[code]
<?php
$text = '1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg';
// 숫자열_문자열[임의의 문자열].이미지확장자
preg_match_all('/\d+_[a-f0-9]+.*?\.(?:jpe?g|png|gif|bmp|webp)/', $text, $matches);
/*
Array
(
[0] => Array
(
[0] => 1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
[1] => 1644130573_db35ae97a0429c3e6ea7.jpg
[2] => 1644130573_db35ae97a0429c3e6ea7_thumb.jpg
)
)
*/
[/code]
[code]
<?php
$text = '1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg';
preg_match_all('/\d+_[a-f0-9]+_\d+x\d+_thumb\.(?:jpe?g|png|gif|bmp|webp)/', $text, $matches);
/*
Array
(
[0] => Array
(
[0] => 1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
)
)
*/
[/code]
보면 알겠지만, 패턴에 일치하는 값만 얻습니다.
1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg > 대상
1644130573_db35ae97a0429c3e6ea7.jpg => 대상 아님
1644130573_db35ae97a0429c3e6ea7_thumb.jpg => 대상 아님
처음과 마지막, _thumb 붙는 문자열까지 구하려면 패턴을 또 바꿔야죠.
역시 지정하는 방법은 다양하지만, 댓글에 언급했던 내용 이용한 패턴 남깁니다.
[code]
<?php
$text = '1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg';
preg_match_all('/\d+_[a-f0-9]+(?:_\d+x\d+)?_thumb\.(?:jpe?g|png|gif|bmp|webp)/', $text, $matches);
/*
Array
(
[0] => Array
(
[0] => 1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
[1] => 1644130573_db35ae97a0429c3e6ea7_thumb.jpg
)
)
*/
[/code]
이해 후 응용&활용입니다.
원하시는 내용을 적어야 삽질을 줄일 수 있습니다.
img file 명에서 어떤 부분이 필요해서 정규식을 쓰고 싶으신 것인지...
답변에 대한 댓글 2개
str_replace()
https://www.php.net/manual/en/function.str-replace.php
를 사용하시면 될 텐데요.
아니면 thumb가 들어 있는지 검사하고 싶은 거라면
strpost()
https://www.php.net/manual/en/function.strpos.php
를 사용하시면 됩니다.
일단 "_thumb.jpg" 가 기본일 것 같으니
look ahead를 사용해서 찾으면 될것 같습니다.
[0-9_a-z]+(?=_thumb.jpg)
위의 출력은 _thumb.jpg를 빼고 나오니 이 부분만 추가해서..
사이즈까지도 look ahead해 도 되고요.
답변에 대한 댓글 2개
꼭 필요한데, 진짜로 머리에 기억은 남지 않는 것이 정규식같습니다.
문제는 여기에 https://sir.kr/so_regex
답은 주로 여기에
https://www.apachezone.com/free?bo_table=free&sca=&sop=and&sfl=wr_subject&stx=%EC%A0%95%EA%B7%9C%EC%8B%9D
시간날때마다 한번씩 풀어 보면 나중에 도움이 될 것 같습니다.
답변을 작성하려면 로그인이 필요합니다.
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
)
[3] => Array
(
)
[4] => Array
(
)
)
이렇게 비워있는것만 나오네요