답변 3개
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 중 하나
(?:패턴) ... 캡처하지 않음
</p>
<p><?php</p>
<p>$text = '1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg
1644120690_3ff48c23ef6473cee37f_400x300_thumb.png';</p>
<p>preg_match_all('/(\d+)_[a-f0-9]+_(\d+)x(\d+)_thumb(\.(?:jpe?g|png|gif|bmp|webp))/', $text, $matches);</p>
<p>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, '
';
echo '생성일: ', $datetime, '
';
echo '크기: ', $width, 'x', $height, 'px
';
echo '확장자: ', $extension, '
';
}</p>
<p>/* 실행 결과</p>
<p>파일명: 1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg
생성일: 2022-02-06 02:14:09
크기: 190x190px
확장자: .jpg</p>
<p> </p>
<p>파일명: 1644120690_3ff48c23ef6473cee37f_400x300_thumb.png
생성일: 2022-02-06 13:11:30
크기: 400x300px
확장자: .png</p>
<p>*/</p>
<p>
답변에 대한 댓글 9개
혹시나 확인. PHP v8.1.x ~ PHP 5.2.x 테스트, 결과 잘 나오네요.
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg
이렇게 형식이 랜덤으로 바껴서 저걸 이용해야되요
썸네일만 삭제 하고싶거든요
나머지 삭제하는 기능은 알아서 가능한데 썸네일 앞에보면 사이즈가 있잖아요 그것까지 없애주고 싶어서요
"패턴"이 일치해야 하는데, 맞지 않아서 그렇습니다.
이해 없이 복사&붙여넣기만 하면 쓸 수 없어요.
[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]
일단 원본이 1644130573_db35ae97a0429c3e6ea7.jpg
이건데 이걸 이용해서
1644130573_db35ae97a0429c3e6ea7_thumb.jpg 으로 _thumb.jpg이랑
_190x190_thumb.jpg 이렇게 붙어 있는것을 빼와서 삭제처리 하고싶은거에요
[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]
이해 후 응용&활용입니다.
디비에서 받아온걸로 하니까 배열에 값이 비워있게 출력되네요..
아리송해요 일단 응용해서 해결 해볼게요
짧게나마 시간 내어주셔서 감사합니다~
정작 어디에 있는 썸네일 삭제인지까지는 알 수 없으니
주어진 내용에 맞는 답변밖에 적을 수 없죠.
(패턴에 일치하는 문자열 구하기)
관리자 페이지의 "썸네일파일 일괄삭제"는 아닌 것 같고,
게시글 내용에 포함된 썸네일 삭제인가요?
내용에서도 지우고, 실제 파일도 지우는...
내용 확인해가며 차근차근 진행해보세요. 파이팅입니다!
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg
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를 사용해서 찾으면 될것 같습니다.
</p>
<p>[0-9_a-z]+(?=_thumb.jpg)</p>
<p>
위의 출력은 _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
(
)
)
이렇게 비워있는것만 나오네요