2011-01-22 5 views
7

나는 이것이 정규 표현식과 관련이 있다고 생각하지만 모든 것이 자신 만의 예술이다 - 나는 도움이 필요하다.Twitter 계정으로의 링크로 @username을 대체 할 PHP

이야기를 표시 할 때 모든 텍스트를 varilable에 저장합니다. $ story라고 말합니다.

내가 원했던 것은 str_replace (내가 필요한 것 같아요)라고하는 것입니다. "텍스트에 @something이 포함되어 있다면 <a href="http://www.twitter.com/something">@something</a>과 같은 링크로 바꿉니다.하지만 아무것도없는 경우에만 수행하십시오. 앞에 @ 기호 "(전자 메일 주소 제외)

또한 공백이나 구두점이있는 경우 '무언가'를 중지해야합니다. 그래서 @ 무언가. <a href="http://www.twitter.com/something.">@something.</a>

이 방법을 만드는 방법에 대한 제안 사항이 있습니까?

preg_replace('/(?<=\s)@(.*?)/', '<a href="....com/$1">@$1</a>') 

내 머리 위로 떨어져가는 :

답변

13
$input = preg_replace('/(^|\s)@([a-z0-9_]+)/i', 
         '$1<a href="http://www.twitter.com/$2">@$2</a>', 
         $input); 

See it

그것은 공백 또는 아무것도 앞에있는 @ 일치 (이것은 시작에있을 때). 단지 트위터 이름과 일치하지만 공간이나 아무것도 그 전에있는 경우에만

$input = preg_replace('/(?<=^|\s)@([a-z0-9_]+)/i', 
         '<a href="http://www.twitter.com/$1">@$1</a>', 
         $input); 

:

은 또한으로 긍정적 인 lookbehind를 사용하여 단락 될 수있다.

+0

감사합니다. 완벽하게 일했습니다. – Andelas

+0

두 번째 인수 (두 번째 예의 경우)는 '$1'이어야합니다. – BudgieInWA

+0

이봐, 정규 표현식을 배우고 있는데,이 예제는 나에게 매우 유용하다. 나는 거의 모든 첫 번째 예제를 얻었지만, 첫 번째 패턴의 끝에있는/i가 무엇을 의미하는지 이해하지 못한다. 누군가가 설명해 주겠다고? –

6

긍정적 인 lookbehind 트릭을 할 수 있습니다. "공백 문자가 앞에 오는 @이있는 경우 @ 다음에 오는 모든 문자를 취하고 html 태그 줄 바꿈"을 수행하십시오.

+1

글쎄, 정규식에'.' 대신'[a-z0-9 _-]'를 쓰고 싶습니다. 맞습니까? 트위터 이름이 특수 문자 나 공백을 가질 수 없으므로 (정규식이 지금 당장 사용하게 될 것입니다.) 실제로 012와 같이 문자열의 끝까지 먹을 것입니다 ... – ircmaxell

+0

바로 트위터 이름이있을 때 실패합니다. 그 전에는 공간이 없다. – codaddict

+0

이것은 "@"기호를 찾고 링크를 만드는 것이지만 URL 뒤에 표시되는 텍스트 나 표시된 내용을 사용하지 않습니다. 그래서 내가 본 것은'@' – Andelas