PHP string yardım yerine

3 Cevap php

i bir açıklama sistemi ile site tasarımı ve i cevap sistemi gibi bir heyecan istiyorum.

Kullanıcı a_registered_username @ koyar eğer ben o kullanıcının profiline bir bağlantı olmak istiyorum.

i preg_replace Bunun için gerekli işlevi olduğunu düşünüyorum.

$ ALL_USERS_ROW * ['username'] bütün kullanıcılar ve ['username'] için veritabanı sorgu dizidir adı sırasıdır.

$ Içerik @ ismini içeren yorumdur

ben bu php de iyi olan birisi için çözmek çok zor olmamalı bence.

Herkes nasıl bunu yapmak için herhangi bir fikir var mı?

3 Cevap

Bunu metin geçmesi ve burada iyi bir başlangıç ​​noktasıdır almak istiyorum:

$txt='this is some text @seanja';

$re1='.*?'; # Non-greedy match on filler
$re2='(@)'; # Any Single Character 1
$re3='((?:[a-z][a-z]+))';   # Word 1

if ($c=preg_match_all ("/".$re1.$re2.$re3."/is", $txt, $matches))
{
      $c1=$matches[1][0];
      $word1=$matches[2][0]; //this is the one you want to replace with a link
      print "($c1) ($word1) \n";
}

: Oluşturulan

http://www.txt2re.com/index-php.php3?s=this%20is%20some%20text%20@seanja&-40&1

[Değiştir]

Eğer (http://www.gskinner.com/RegExr/), ve sağda topluluk sekmesinde twitter araştırın buraya giderseniz Aslında, bu tam olarak sorun için gerçekten iyi çözümleri bir çift bulabilirsiniz:

$mystring = 'hello @seanja @bilbobaggins sean@test.com and @slartibartfast';
$regex = '/(?<=@)((\w+))(\s)/g';
$replace = '<a href='http://twitter.com/$1' target="_blank">$1</a>$3';
preg_replace($regex, $replace, $myString);
$content = preg_replace( "/\b@(\w+)\b/", "http://twitter.com/$1", $content );

çalışması gerekir, ama benim test çalışması için kelime sınır sonuç alınamıyor ... PHP sürümlerinde kullanılan regex kitaplıkta belki bağımlı

 $content = preg_replace( "/(^|\W)@(\w+)(\W|$)/", "$1http://twitter.com/$2$3", $content );

test edilmiş ve çalışır olduğunu

$str = preg_replace('~(?<!\w)@(\w+)\b~', 'http://twitter.com/$1', $str);

E-postaları eşleşmiyor. Çevresinde herhangi bir boşluk eşleşmiyor.