리자

태그변환 정규식

· 2008-09-26 (금) 10:54:21 · 3480 · 5
예를 들어...
br태그를 XHTML형식인 br/로 바꾸는 것을 만들때요.

$text = '<br class="abcd">
<br>
<br >
<br/>';

$pattern = '/<br(.*)>/';
$replacement = '<br\1/>';
$result = preg_replace($pattern, $replacement, $text);
print_r($result);

이렇게 하면

<br class="abcd"/>
<br/>
<br />
<br//>

대체로 잘 나오지만 마지막에 '이미 잘 되어 있는' br/태그일경우 br//로 슬래시가 두개가 되어버립니다.

이런 경우 어떻게 해야 할까요.
/를 인식시키려면 $pattern을 바꿔줘야 하겠는데, 정규식 생초보라 잘 안되네요 ^^
[이 게시물은 관리자님에 의해 2011-10-31 17:16:08 PHP & HTML에서 이동 됨]
|

댓글 5개

$text = '<br class="abcd">
<br>
<br >
<br/>';

$pattern = '/<br([^\/]*)>/i';
$replacement = '<br$1/>';
$result = preg_replace($pattern, $replacement, $text);
print_r($result);


이것도 되네요. ^^


http://phpschool.com/guild/guild_main.php?gd_num=85
br뒤에 태그가 바로 올 수 있으니.. (.*) 보단 ([^>]*)가 맞습니다.
공백이나 /는 무시하고 강제로 치환하면되니.. ()에서 빼고..
대소문자 구분안하기 /i 옵션 추가..

---
$pattern = '/<br[[:space:]\/]*([^>]*)>/i';
$replacement = '<br \1/>';
<?php

$text = <<<TEXT
<br class="abcd"/> 같이 태그내에 설정값이 있고 뒤에 /가 있을 경우엔
<br class="abcd"//> 같이 슬래시가 두개로 변환되는데 이 경우는 어떻게 해야 할까요.
<br class="abcd">
<br>
<br />
<br/> <br//>
TEXT;

echo preg_replace_callback('@<br(.*?)/*>@', 'trim_callback', $text);
function trim_callback($matches)
{
return '<br '.trim($matches[1]).'/>';
}

?>
<?php

$text = <<<TEXT
<br class="abcd"/> 같이 태그내에 설정값이 있고 뒤에 /가 있을 경우엔
<br class="abcd"//> 같이 슬래시가 두개로 변환되는데 이 경우는 어떻게 해야 할까요.
<br class="abcd">
<br>
<br />
<br/> <br//>
TEXT;

$text = preg_replace("`<br([^>]*)`ie", "'<br' . stripslashes(str_replace('/', '', '\\1')) . '/'", $text);

?>
<textarea rows=10 cols=100><?=$text?></textarea>
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
10-09-25 조회 2,702
10-09-19 조회 2,732
10-09-15 조회 2,738
10-09-15 조회 4,141
10-09-15 조회 3,362
10-09-15 조회 2,471
10-09-07 조회 3,583
10-08-27 조회 4,041
10-06-11 조회 4,199
10-05-31 조회 2,445
10-02-27 조회 4,982
10-02-09 조회 3,730
09-10-10 조회 7,323
09-03-19 조회 3,161
09-02-09 조회 3,436
09-02-09 조회 4,513
08-11-01 조회 2,891
08-09-29 조회 4,542
08-09-26 조회 3,503
08-09-26 조회 3,580
08-09-26 조회 2,716
08-09-26 조회 3,760
08-09-26 조회 3,481
08-09-26 조회 4,244
08-09-18 조회 3,556
08-09-09 조회 3,211
08-08-28 조회 2,749
08-07-06 조회 3,520
08-05-21 조회 4,680
08-05-13 조회 4,521
08-04-17 조회 4,894
08-02-19 조회 3,521
08-01-18 조회 3,828
08-01-10 조회 3,790
07-10-22 조회 3,608
07-10-09 조회 4,238
07-10-03 조회 3,490
07-07-06 조회 4,200
07-07-06 조회 4,412
07-07-06 조회 4,021
07-06-28 조회 3,546
07-06-05 조회 3,551
07-06-05 조회 4,095
07-05-30 조회 3,265
07-05-02 조회 3,675
07-04-15 조회 5,063
07-04-11 조회 3,617
07-04-05 조회 3,905
07-03-31 조회 3,138
07-03-31 조회 4,114
07-03-30 조회 3,716
07-03-24 조회 3,992
07-03-22 조회 3,643
07-03-12 조회 4,395
07-02-16 조회 3,251
07-02-14 조회 5,152
07-02-10 조회 3,975
07-02-09 조회 4,364
07-01-19 조회 4,026
07-01-16 조회 4,945
06-12-16 조회 5,819
06-11-30 조회 3,575
06-11-25 조회 3,674
06-10-15 조회 5,045
06-09-26 조회 5,292
06-09-26 조회 5,411
06-09-22 조회 4,241
06-09-21 조회 3,527
06-09-21 조회 3,613
06-09-02 조회 3,467
06-08-08 조회 5,102
06-07-20 조회 3,700
06-07-17 조회 3,323
06-07-13 조회 4,150
06-07-11 조회 3,444
06-07-11 조회 3,428
06-07-11 조회 3,813
06-06-29 조회 6,030
06-06-19 조회 6,433
06-06-02 조회 3,487
06-05-24 조회 4,976
06-05-14 조회 7,752
06-05-08 조회 3,866
06-02-02 조회 5,438
05-12-16 조회 4,486
05-12-05 조회 5,138
05-06-28 조회 4,086
05-04-11 조회 4,041
05-04-11 조회 4,233
05-04-11 조회 3,299
05-03-13 조회 3,202
05-03-12 조회 4,286
04-12-08 조회 7,761
04-12-01 조회 5,163
04-11-28 조회 3,320
04-11-28 조회 3,162
04-08-05 조회 5,588
04-08-05 조회 4,933
04-08-05 조회 5,532