Intereting Posts
Получение данных из одного массива в обратном порядке WAMP Stack PHP «Неустранимая ошибка: класс« SoapClient »не найден» Удалить текст за пределами скобок Зачем использовать шаблонный движок с каркасом? конвертировать строки с разделителями tab / space в вложенный массив PHP: Как рассчитать возраст человека в месяцах + дни? как точно найти данные между выбранной диагональной областью в запросе mysql Извлечь файл из строки ZIP PHP извлекает данные из строки таблицы и сохраняет в переменную попытка отправить почту с помощью быстрой почты, gmail smtp, php Как отправить значение HTTP POST на страницу (PHP) с помощью Python? сообщение об успешном запуске / сбое после отправки? С Doctrine, какие преимущества от использования DQL над SQL? PHPExcel throws Fatal error: разрешенный размер памяти 134217728 байт исчерпан (пытался выделить 71 байт) Как получить ошибку mysqli в разных средах?

preg_match все слова начинаются с @?

я не очень уверен в регулярных выражениях, поэтому я должен спросить вас:

Как узнать с PHP, если строка содержит слово, начинающееся с @ ??

например, у меня есть строка типа «Это для @codeworxx» ???

Мне очень жаль, но у меня нет отправной точки для этого 🙁

Надеюсь, ты поможешь.

Спасибо, Саша


хорошо спасибо за результаты – но я сделал ошибку – как реализовать в eregi_replace ???

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

не работает??!?

Зачем? мне не нужно вводить то же выражение, что и шаблон?

Solutions Collecting From Web of "preg_match все слова начинаются с @?"

Сопоставьте что-нибудь с каким-то пробелом перед символом @ за которым следует что-то еще, кроме пробела:

 $ 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