Мне нужна помощь, чтобы узнать строки из текста, который начинается с @
и до следующего ближайшего пространства preg_match
в php
Пример: я хочу получить @string из этой строки как отдельную.
В этом примере мне нужно извлечь «@string» из этой строки.
Может ли какой-либо орган помочь мне найти решения для этого.
Заранее спасибо!
PHP и Python не одинаковы в отношении поиска. Если вы уже использовали такую функцию, как strip_tags
на вашем снимке, что-то вроде этого может работать лучше, чем пример Python, представленный в одном из других ответов, так как мы также можем использовать осмотрительные утверждения.
<?php
$string = <<<EOT
I want to get @string from this line as separate.
In this example, I need to extract "@string" alone from this line.
@maybe the username is at the front.
Or it could be at the end @whynot, right!
[email protected] would be an e-mail address and should not match.
EOT;
echo $string."<br>";
preg_match_all('~(?<=[\s])@[^\s.,!?]+~',$string,$matches);
print_r($matches);
?>
Выходные результаты
Array
(
[0] => Array
(
[0] => @string
[1] => @maybe
[2] => @whynot
)
)
Если вы тянете прямо из самого потока HTML, посмотрите на HTML в Twitter, но он отформатирован так:
<s>@</s><b>UserName</b>
Таким образом, чтобы соответствовать имени пользователя из потока html, вы должны соответствовать следующему:
<?php
$string = <<<EOT
<s>@</s><b>Nancy</b> what are you on about?
I want to get <s>@</s><b>string</b> from this line as separate. In this example, I need to extract "@string" alone from this line.
<s>@</s><b>maybe</b> the username is at the front.
Or it could be at the end <s>@</s><b>WhyNot</b>, right!
[email protected] would be an e-mail address and should not match.
EOT;
$matchpattern = '~(<s>(@)</s><b\>([^<]+)</b>)~';
preg_match_all($matchpattern,$string,$matches);$users = array();
foreach ($matches[0] as $username){
$cleanUsername = strip_tags($username);
$users[]=$cleanUsername;
}
print_r($users);
Выход
Array
(
[0] => @Nancy
[1] => @string
[2] => @maybe
[3] => @WhyNot
)
Просто сделай просто:
preg_match('/@\S+/', $string, $matches);
Результат в $matches[0]