2012-07-02 1 views
1

Хорошо, вопрос заголовка может показаться запутанным, да, я тоже был в замешательстве. Во всяком случае, то, что я хотел это: Скажем, у меня есть эта строка текста,Как выбрать несколько текстов с @ в качестве первой буквы текста внутри строки текстов?

The quick brown @fox jumps @over the @lazy dog. 

Эта строка текста является динамически неправдоподобной «одной строкой» из базы данных, а не массив текстов. Предполагая, что тексты с первой буквой в виде «@» являются ссылками на страницу или что-то в этом роде, я хочу, чтобы я мог указать, где разместить мой якорный тег, в моем случае я хочу поместить тег привязки на каждый текст, начиная с ' @».

Я пробовал взорваться, но, похоже, это не ответ на этот вопрос. Может ли кто-нибудь помочь мне здесь? Благодарю.

+0

После того как вы обработали эту строку с PHP, как вы хотите, чтобы она выглядела, какой конечный результат вы ищете? –

+0

Возможный дубликат [Регулярное выражение для преобразования имен пользователей в такие ссылки, как Twitter] (http://stackoverflow.com/questions/2705769/regular-expression-to-convert-usernames-into-links-like-twitter-does) – mario

+0

@mario, спасибо, что позволил мне узнать, но моя проблема немного другая. но все равно спасибо. –

ответ

2

Вы не хотите использовать explode для этого, но регулярное выражение. Для соответствия нескольким событиям, preg_match_all является сделкой.

preg_match_all('/@\w+/', $input, $matches); 

     #  @ is the literal "@" character 
     # and \w+ matches consecutive letters 

Вы certainy можете использовать preg_replace, чтобы превратить их в ссылки. Или еще лучше: preg_replace_callback, чтобы переместить некоторую логику в функцию обработчика.

+0

Согласитесь, что 100% подходит для подхода с регулярным выражением. Побей меня! –

+0

Вау, это ново для меня. Но сейчас я в шоке, я как-то понимаю поток вашего ответа, но мне кажется, что мне трудно реализовать. Некоторое время назад я искал preg_match_all на php.net/manual, но не могли бы вы рассказать о том, что я должен делать? * feeldumbrightnow –

+0

aw да, в конце концов я получил его. Спасибо, парни. Теперь я буду беспокоить себя preg_replace. –

0

Вы можете использовать взрываются обработать слова, которые имеют @ раньше ... Это действительно зависит от того, что вы хотите сделать:

//Store the string in a variable 
$textVar = "The quick brown @fox jumps @over the @lazy dog."; 

//Use explode to separate words 
$words = explode(" ", $textVar); 

//Check all the variables in the array, if the first character is a @ 
//keep it, else, unset it 
foreach($words as $key=>$val) { 
    if(substr($val, 0, 1) != "@") { 
     unset($words[$key]); 
    } else { 
     $words[$key] = "<a href='#'>".$words[$key]."</a>"; 
    } 
} 

//You can now printout the array and you will get only the words that start with @ 
foreach($words as $word) { 
    echo $word."<br>"; 
} 

Вы также можете сохранить строки, которые не имеют на @ и использование взломать все вместе:

//Store the string in a variable 
$textVar = "The quick brown @fox jumps @over the @lazy dog."; 

//Use explode to separate words 
$words = explode(" ", $textVar); 

//Check all the variables in the array, if the first character is a @ 
//keep it, else, unset it 
foreach($words as $key=>$val) { 
    if(substr($val, 0, 1) != "@") { 
     //Do nothing 
    } else { 
     $words[$key] = "<a href='#'>".$words[$key]."</a>"; 
    } 
} 

//You can now printout the string 
$words = implode($words, " "); 
echo $words;