2014-06-23 5 views
0

정규 표현식을 사용하여 @user 이름을 링크로 변환하고 있습니다. 예를 들어 사용자가 @Alex Ferguson을 입력하면 Alex Ferguson을 하이퍼 링크로 변환해야합니다. 여기에 첫 번째 이름을 하이퍼 링크로 변환하고 성을 제외합니다. @에 가까운 단어를 찾습니다. 이름과 성 사이에 공백이 없으면 제대로 작동합니다. 이름과 성을 모두 하이퍼 링크로 변환 할 수있는 방법이 있습니까?정규 표현식을 사용하는 PHP @mention

function convert($msg){ 
$message = preg_replace(array('/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/', '/(^|[^a-z0-9_])@([a-z0-9_]+)/i', '/(^|[^a-z0-9_])#([a-z0-9_]+)/i'), array('<a href="$1" target="_blank">$1</a>', '$1<a href="">@$2</a>', '$1<a href="index.php?hashtag=$2">#$2</a>'), $msg); 
return $message; 
} 

감사합니다 ..

+0

항상 성이 있습니까? 그렇지 않다면 어떻게 정규 표현식이 사용자 이름에 속하는 부분을 결정해야합니까? – stema

+0

이름과 성은 필수 항목입니다. – user1851420

답변

1

이의 일반적인 방법은 다음과 같습니다 : 여기

내 코드입니다

$regex = '~(?i)@[a-z]+[ ][a-z]+~'; 
$replaced = preg_replace($regex,'<a href="">$0</a>',$string); 

노트

  • 나는거야 그대로 두라. 공란을 기입하십시오.
  • 허용되는 문자의 범위는 이름과 관련된 한 가지 문제입니다. 줄리 오하라는 어때? M.C. 코코아?
+0

링크로 변환하기 전에 콜백을 수행 할 수 있습니까? 사용자가 데이터베이스에 있는지 여부를 확인하고 싶습니다. – user1851420

+0

물론입니다! 'preg_replace_callback ($ regex, function ($ m) {// 당신이 좋아하는 것을하고, look up 등을하고, 대체물을 반환하거나, $ string을 0 번 바꿔 준다.} $ – zx81

+0

preg_replace_callback insted of preg_replace를 사용해야합니까? – user1851420

관련 문제