채택완료

정규표현식 어디가 잘못 되었을까요?

$list[$idx][$i]['href'] 상태

https://homzzang.com/bbs/board.php?bo_table=free&wr_id=312

$list[$idx][$i]['href'] = preg_replace( "/\/bbs\/board\.php\?bo_table=/" , '/', $list[$idx][$i]['href'] ); 상태

https://homzzang.com/free&wr_id=312

$list[$idx][$i]['href'] = preg_replace( "/\&wr_id=/" , '/', $list[$idx][$i]['href'] ); 상태

https://homzzang.com/free&wr_id=312
 

저 갈색 코드가 이상한지 아래처럼 표현이 안 되는데,

https://homzzang.com/free/312 처럼 표현하려면 ?
 

|

답변 3개 / 댓글 5개

채택된 답변
+20 포인트
2019-02-02 (토) 07:34:55

url은 정규표현식보다 파싱함수를 쓰는 것이 더 정확하고 편리합니다.

Copy
$url = 'https://homzzang.com/bbs/board.php?bo_table=free&wr_id=312';

$array = parse_url($url);
parse_str($array['query'], $param);

echo "{$array['scheme']}://{$array['host']}/{$param['bo_table']}/{$param['wr_id']}";

// https://homzzang.com/free/312

http://php.net/manual/en/function.parse-url.php

http://php.net/manual/en/function.parse-str.php

답변에 대한 댓글 1개

덕분에 잘 해결했습니다. 주말 잘 보내세요. ^^

PS.
php7.2.10에선 아래처럼 해야 출력이 되네요.

$array = parse_url($list[$idx][$i]['href']);
//print_r2($array);
$param = array();
parse_str($array['query'], $param);
//print_r2($param);
$list[$idx][$i]['href'] = "{$array['scheme']}://{$array['host']}/{$param['bo_table']}/{$param['amp;wr_id']}";
// https://homzzang.com/free/312
2019-02-02 (토) 00:55:30

오옹 파싱하시남유!! arrey 결과값을 보면서 하나씩 해야 ㅠ_ㅠ 크흡 고통임

답변에 대한 댓글 1개

파싱은 아니고, 그냥 주소만 간격하게 보여주려구요. ㅎ

preg_replace('/\&wr_id\=/', '/', $list[$idx][$i]['href']);

https://www.phpliveregex.com/#tab-preg-replace

답변에 대한 댓글 3개

아래처럼 넣어봤는데, 여전히 같은 증상이네용. ^^;

$list[$idx][$i]['href'] = preg_replace('/\&wr_id\=/', '/', $list[$idx][$i]['href']);
제가 테스트해봤을 땐 본문에 있는걸로도 잘 되네요.
5.6 7.2에서 둘다 테스트 해봤습니다만..
다른 곳에 원인이 있는게 아닌가 싶습니다
이상하게 & 기호만 안 되네요.

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