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

특정 문자열 제거? 채택완료

aaab 4년 전 조회 3,401

$str= '{100000|2.0T×1m×5m|100000|2.0T×1m×10m|200000|2.0T×1m×20m|400000|2.0T×1m×25m|500000 }'

 

라고 가정시  |400000| 처럼 이 "  |숫자| "   이부분   | | 사이의 숫자만 지울수있을까요?

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

답변 2개

채택된 답변
+20 포인트
Big1
4년 전

</p>

<p><?php

$str= '{100000|2.0T×1m×5m|100000|2.0T×1m×10m|200000|2.0T×1m×20m|400000|2.0T×1m×25m|500000 }';

echo preg_replace('/([\|\{\s])[0-9]+([\|\}\s])/', '$1$2', $str);

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

답변에 대한 댓글 6개

a
aaab
4년 전
혹시 소스 해설 가능할까요?!
a
aaab
4년 전
$str='55000|||M|=|55000|||L|=|55000|||XL|=|55000|||2XL|=|55000|||3XL|=|55000';

이라면
앞부분 숫자는 어떻게 지울수있ㅇ나요?
B
Big1
4년 전
([\|\{\s]) 이게 replacement의 $1
([\|\}\s]) 이게 replacement의 $2
사이에 있는 하나 이상의 숫자 [0-9]+

[] 정규식에서 문자열 집합이요
숫자의 앞에 | { 공백
숫자의 뒤에 | } 공백

그런데 | { } 이 문자는 정규식에서 사용하는 특수문자이므로
백슬러시로 이스케이프 \| \{ \}
공백은 \s space의 줄임말입니다

저기에 걸리는 문자는
|숫자|
{숫자|
|숫자}
{숫자}
(공백)숫자(공백)
... 너무 많아서 생략
B
Big1
4년 전
앞뒤로 | 문자를 넣어서 해야겠죠?
echo preg_replace('/([\|\{\s])[0-9]+([\|\}\s])/', '$1$2', '|'.$str.'|');
B
Big1
4년 전
앞뒤로 공백을 넣고 replace 가 끝나면 제거
echo trim(preg_replace('/([\|\{\s])[0-9]+([\|\}\s])/', '$1$2', ' '.$str.' '));
B
Big1
4년 전
정규식을 사용한다는 건
input 문자열에 특정한 패턴이 있다는 것입니다
모든 상황을 전부 cover 해야 한다면 정규식으로 할 수 없겠죠
여기서 핵심 패턴은 |숫자| 인데요
적어주신 예제 $str 의 패턴을 보고 { } 도 있고 끝에 공백 } 이것도 있어서
공백과 {} 문자도 앞뒤로 넣어준것입니다

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

'|' 없애려면

$str= '{100000|2.0T×1m×5m|100000|2.0T×1m×10m|200000|2.0T×1m×20m|400000|2.0T×1m×25m|500000 }';

echo str_replace('|', '', $str); '|'사이의 값들을 배열로 담으려면

 

$str= '{100000|2.0T×1m×5m|100000|2.0T×1m×10m|200000|2.0T×1m×20m|400000|2.0T×1m×25m|500000 }'; $temp_arr = explode('|', $str); echo $temp_arr[0];

echo $temp_arr[1];

...

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

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

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

로그인