preg_match bütün kelimeler bir ile başlar @?

5 Cevap php

Düzenli ifadeler ile çok sağlam değilim, bu yüzden sana sormak zorundayım:

Bir dize ile @? Başlayan bir sözcük varsa nasıl PHP ile öğrenmek için?

örneğin i "Bu @ codeworxx için" gibi bir dize var??

Çok üzgünüm, ama bunun için HAYIR başlangıç ​​noktası var: (

Eğer yardımcı olabilir umuyoruz.

Thanks, Sascha


tamam sonuçları için teşekkürler - ama ben bir hata yaptım - nasıl eregi_replace uygulamak için??

$text = eregi_replace('/\B@[^\B]+/','<a href="\\1">\\1</a>', $text);

çalışmıyor?!?

neden? i desen olarak aynı ifadeyi girmek zorunda değilsiniz?

5 Cevap

Bir önünde bazı boşluk @ boşluklarla daha başka bir şey tarafından takip etmiş olan her şey maç:

$ cat 1812901.php

<?php
    echo preg_match("/\B@[^\B]+/", "This should @match it");
    echo preg_match("/\B@[^\B]+/", "This should not@ match");
    echo preg_match("/\B@[^\B]+/", "This should match nothing and return 0");
    echo "\n";
?>

$ php 1812901.php 
100

Bir kelime aralarında boşluklarla harf dizisi tanımlamak varsayarsak, o zaman bu sizin için iyi bir başlangıç ​​noktası olmalıdır:

$subject = "This is for @codeworxx";
$pattern = '/\s*@(.+?)\s/';
preg_match($pattern, $subject, $matches);
print_r($matches);

Explanation: \s*@(.+?)\s - look for anything starting with @, group all the following letters, numbers, and anything which is not a whitespace (space, tab, newline), till the closest whitespace.

Iç grupları ve düzenli ifade sonuçları erişim için $matches dizinin çıkış bakınız.

Bu regex için yararlı bir kaynak olabilir http://www.gskinner.com/RegExr/

Bu gibi dize break up:

$string = 'simple sentence with five words';
$words = explode(' ', $string );

Sonra döngü dizi yalak ve her kelimenin ilk karakteri "@" eşittir kontrol edebilirsiniz:

if ($stringInTheArray[0] == "@")

@ OP, gerek regex. Sadece PHP string yöntemleri

$mystr='This is for @codeworxx';
$str = explode(" ",$mystr);
foreach($str as $k=>$word){
    if(substr($word,0,1)=="@"){
        print $word;
    }
}