я не очень уверен в регулярных выражениях, поэтому я должен спросить вас:
Как узнать с PHP, если строка содержит слово, начинающееся с @ ??
например, у меня есть строка типа «Это для @codeworxx» ???
Мне очень жаль, но у меня нет отправной точки для этого 🙁
Надеюсь, ты поможешь.
Спасибо, Саша
хорошо спасибо за результаты – но я сделал ошибку – как реализовать в eregi_replace ???
$text = eregi_replace('/\B@[^\B]+/','<a href="\\1">\\1</a>', $text);
не работает??!?
Зачем? мне не нужно вводить то же выражение, что и шаблон?
Сопоставьте что-нибудь с каким-то пробелом перед символом @
за которым следует что-то еще, кроме пробела:
$ 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
сломайте свою строку так:
$string = 'simple sentence with five words'; $words = explode(' ', $string );
Затем вы можете зацикливать массив и проверить, равен ли первый символ каждого слова «@»:
if ($stringInTheArray[0] == "@")
Предполагая, что вы определяете слово последовательность букв без пробелов между ними, это должно быть хорошей отправной точкой для вас:
$subject = "This is for @codeworxx"; $pattern = '/\s*@(.+?)\s/'; preg_match($pattern, $subject, $matches); print_r($matches);
Объяснение: \s*@(.+?)\s
– искать что-нибудь, начиная с @ , группировать все следующие буквы, цифры и все, что не является пробелом (пробел, табуляция, новая строка), до ближайшего пробела.
См. Вывод массива $matches
matches для доступа к внутренним группам и результатам регулярных выражений.
@OP, нет необходимости в регулярном выражении. Просто строковые методы PHP
$mystr='This is for @codeworxx'; $str = explode(" ",$mystr); foreach($str as $k=>$word){ if(substr($word,0,1)=="@"){ print $word; } }
Просто сделайте это полезным для кого-то в будущем
/((?<!\S)@\w+(?!\S))/
Это будет соответствовать любому слову, содержащему буквенно-цифровые символы, начиная с «@». Он не будет соответствовать словам с «@» нигде, кроме начала слова.
Соответствующие случаи:
@username foo @username bar foo @username1 bar @username2
Неудачные случаи:
foo@username @username$ @@username