테스트 사이트 - 개발 중인 베타 버전입니다

정규식 질문.. 채택완료

릴보이즈 3년 전 조회 3,030

안녕하세요! 오랜만에 질문 드리네요~ 

1644081249_3ff48c23ef6473cee37f_190x190_thumb.jpg

이렇게 된거 이미지가 있는데 이걸 정규식을 어떻게 표현해야될까요..

 

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
B
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개

릴보이즈
3년 전
Array
(
[0] => Array
(
)

[1] => Array
(
)

[2] => Array
(
)

[3] => Array
(
)

[4] => Array
(
)

)

이렇게 비워있는것만 나오네요
B
BiHon
3년 전
위 코드 그대로 실행했는데 $matches 내용이 그렇게 떠요?

혹시나 확인. PHP v8.1.x ~ PHP 5.2.x 테스트, 결과 잘 나오네요.
릴보이즈
3년 전
1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg

이렇게 형식이 랜덤으로 바껴서 저걸 이용해야되요
썸네일만 삭제 하고싶거든요
나머지 삭제하는 기능은 알아서 가능한데 썸네일 앞에보면 사이즈가 있잖아요 그것까지 없애주고 싶어서요
B
BiHon
3년 전
질문에서의 문자열과 댓글에서의 문자열이 다르죠?
"패턴"이 일치해야 하는데, 맞지 않아서 그렇습니다.
이해 없이 복사&붙여넣기만 하면 쓸 수 없어요.

[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]
릴보이즈
3년 전
제가 정정 할게요 쓰다보니까 첨에 설명을 잘못했어요
일단 원본이 1644130573_db35ae97a0429c3e6ea7.jpg
이건데 이걸 이용해서
1644130573_db35ae97a0429c3e6ea7_thumb.jpg 으로 _thumb.jpg이랑
_190x190_thumb.jpg 이렇게 붙어 있는것을 빼와서 삭제처리 하고싶은거에요
B
BiHon
3년 전
그게 처음에 남긴 색상 알록달록 패턴입니다.

[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]
이해 후 응용&활용입니다.
릴보이즈
3년 전
네~ 감사합니다 다만 이게 직접 예시를 주어진걸로 했을떄는 당연히 잘 되는데
디비에서 받아온걸로 하니까 배열에 값이 비워있게 출력되네요..
아리송해요 일단 응용해서 해결 해볼게요
릴보이즈
3년 전
일단 정성적으로 답변 달아주셔서 채택 해드릴게요
짧게나마 시간 내어주셔서 감사합니다~
B
BiHon
3년 전
댓글까지 봐야 썸네일 삭제가 목적이라는 것을 알 수 있는데
정작 어디에 있는 썸네일 삭제인지까지는 알 수 없으니
주어진 내용에 맞는 답변밖에 적을 수 없죠.
(패턴에 일치하는 문자열 구하기)

관리자 페이지의 "썸네일파일 일괄삭제"는 아닌 것 같고,
게시글 내용에 포함된 썸네일 삭제인가요?
내용에서도 지우고, 실제 파일도 지우는...

내용 확인해가며 차근차근 진행해보세요. 파이팅입니다!

댓글을 작성하려면 로그인이 필요합니다.

원하시는 내용을 적어야 삽질을 줄일 수 있습니다.

img file 명에서 어떤 부분이 필요해서 정규식을 쓰고 싶으신 것인지...

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

릴보이즈
3년 전
엠엘님~ 이미지 형식이 좀 달라지거든요 랜덤인데 아래 형식이 있거든요 근데 썸네일 붙은 부분만 삭제를 하려구요

1644130573_db35ae97a0429c3e6ea7_190x190_thumb.jpg
1644130573_db35ae97a0429c3e6ea7.jpg
1644130573_db35ae97a0429c3e6ea7_thumb.jpg
엑스엠엘
3년 전
단순히 문자열 치환하는 거면
str_replace()
https://www.php.net/manual/en/function.str-replace.php
를 사용하시면 될 텐데요.

아니면 thumb가 들어 있는지 검사하고 싶은 거라면
strpost()
https://www.php.net/manual/en/function.strpos.php
를 사용하시면 됩니다.

댓글을 작성하려면 로그인이 필요합니다.

3년 전

일단 "_thumb.jpg" 가 기본일 것 같으니

look ahead를 사용해서 찾으면 될것 같습니다.

</p>

<p>[0-9_a-z]+(?=_thumb.jpg)</p>

<p>

위의 출력은 _thumb.jpg를 빼고 나오니 이 부분만 추가해서..

사이즈까지도 look ahead해 도 되고요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

릴보이즈
3년 전
아~ 저렇게 하면되는건가요? 다른개발자분이 만든거라서 원본이랑 달라서 애먹었어요
마젠토
3년 전
매번 다시 봐야 되지만, 한번 해 본것은 다시 찾아서 이것저것 조합을 해 봅니다.
꼭 필요한데, 진짜로 머리에 기억은 남지 않는 것이 정규식같습니다.

문제는 여기에 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

시간날때마다 한번씩 풀어 보면 나중에 도움이 될 것 같습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인