PHP preg_replace 의 정규표현식 문제입니다.
글쓴이: ctcquatre / 작성시간: 월, 2005/10/10 - 12:52오후
php school에서 답을 구해봤는데 예상했던 답이 구해지지 않아
여기에 다시 글을 포스트 합니다.
$ret = preg_replace("/\[\:url\s*\=\s*(http|https)\:\/\/([\w\/\.\?\-\#\=\&]+)\]/i","<a href='\${1}://\${2}' target='_new' style='" . $style . "'>\${1}://\${2}</a>",$str);
위와 같이 정규표현식을 구성했습니다.
역할은
[:url=http://www.abc.com?index=17&no=1234]
같은 텍스르를 링크로 바꿔주는 것입니다.
전부다 되는데 텍스트 내용에 & 문자만 들어가면 패턴이 일치하지 않습니다.
분명 위에 \&를 썼는데도 말이죠.
즉 예를 들면
[:url=http://www.abc.com?index=17?_-no=1234]
이런 주소들은 전부다 링크가 걸립니다.
하지만
주소에 &만 들어가면 패턴불일치가 되버리는군요.
ps: 오늘 아침에 차타고 학교 오는데 가을 분위기가 물씬 풍기네요.
아.. 남자의 마음이... :)
Forums:
올려주신 코드로 테스트해보니 링크가 만들어지는데요? 뭐가 문제이신 건지.
올려주신 코드로 테스트해보니 링크가 만들어지는데요? 뭐가 문제이신 건지.... :shock:
...
잘 되는데요... :shock:
잘 되는데요... :shock:
패턴을 보니 ']'가 나오면 URL 주소가 끝났음을 말하는 것 같은데
패턴을 보니 ']'가 나오면 URL 주소가 끝났음을 말하는 것 같은데
([\w\/\.\?\-\#\=\&]+)
대신에
([^\]]+)
를 써보는건 어떻겠습니까?
흑.. 왜 나는 안돼는지..설마 버젼문제일리는 절대 없을테고..
흑.. 왜 나는 안돼는지..
설마 버젼문제일리는 절대 없을테고..
([\w\/\.\?\-\#\=\&]+)
부분이 안먹어서
(\S+) 로 하니까 되기는하는데..
jeweljar님의 ([^\]]+)는 그렇게 써볼까도 했는데..
위와 같이 url에 올수있는 문자를 명시하는 이유는
url에 깔끔한 처리를 위해서 입니다.
끝에 실수로 ]를 안붙여줘도 url이 끝나는대로 다른 문자에는 영향을 안받게
말이죠..
아.. 오늘 다시 테스트해봐야겠습니다..
Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.
이런.. 좀더 확인을 했어야 하는데 죄송합니다.. --;몇개월 전에
이런.. 좀더 확인을 했어야 하는데 죄송합니다.. --;
몇개월 전에 짜놓은 소스를 수정하다보니
이렇게 &를 &로 치환해서 저장해놓고 읽을때 preg_replace를 썼네요.
오늘 다른 분들이 된다시길래... 왠지 이럴것 같다는 느낌이 들더니만..
결국은.. 요즘 왜 이러는지
도와주셔서 감사합니다.
Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.
[quote="ctcquatre"]흑.. 왜 나는 안돼는지..설마 버
<del>
혹시 preg_replace를 호출하기 전에 htmlspecialchars 같은 게 호출된 게 아닐까요? 그렇게 된다면 &는 &로 바뀌고 ;가 정규식에 들어 있지 않기 때문에 match에 실패할 겁니다.
</del>
커헉. 창 켜 놓고 다른 글 답변한 뒤에 이 글을 답변해 놓고 나니까 위에 뭔가가... orz
그나저나, 주어진 정규표현식만으로 모든 url이 제대로 표시되지는 않을 것 같습니다. 적어도 @ ~ % (저는 여기에 , : ;까지 넣어서 사용합니다) 정도는 더 넣어 줘야 할 것 같아 보이네요.
- 토끼군
댓글 달기