preg_match все слова начинаются с @? - PullRequest
1 голос
/ 28 ноября 2009

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

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

например. у меня есть строка вроде "Это для @codeworxx" ???

Мне очень жаль, но у меня НЕТ отправной точки для этого: (

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

Спасибо, Sascha


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

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

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

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

Ответы [ 5 ]

5 голосов
/ 28 ноября 2009

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

$ 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
2 голосов
/ 28 ноября 2009

разбей свою строку так:

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

Затем вы можете выполнить цикл по массиву и проверить, равен ли первый символ каждого слова "@":

if ($stringInTheArray[0] == "@")
1 голос
/ 28 ноября 2009

Если вы определили слово, последовательность букв без пробелов между ними, то это должно быть хорошей отправной точкой для вас:

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

Пояснение: \s*@(.+?)\s - ищите все, что начинается с @ , группируйте все следующие буквы, цифры и все, что не является пробелом (пробел, табуляция, символ новой строки), до ближайшего пробела.

См. Вывод массива $matches для доступа к внутренним группам и результатам регулярных выражений.

0 голосов
/ 18 февраля 2015

Только если это полезно для кого-то в будущем

/((?<!\S)@\w+(?!\S))/

Это будет соответствовать любому слову, содержащему буквенно-цифровые символы, начиная с "@". Он не будет совпадать со словами «@», кроме начала слова.

Соответствующие случаи:

@username
foo @username bar
foo @username1 bar @username2

Неудачные случаи:

foo@username
@username$
@@username
0 голосов
/ 29 ноября 2009

@ OP, не нужно регулярное выражение. Просто строковые методы PHP

$mystr='This is for @codeworxx';
$str = explode(" ",$mystr);
foreach($str as $k=>$word){
    if(substr($word,0,1)=="@"){
        print $word;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...