regex — preg match, чтобы получить текст после символа @ и до следующего пробела, используя переполнение стека

Мне нужна помощь, чтобы узнать строки из текста, который начинается с @ и до следующего ближайшего пространства preg_match в php

Пример: я хочу получить @string из этой строки как отдельную.
В этом примере мне нужно извлечь «@string» из этой строки.

Может ли какой-либо орган помочь мне найти решения для этого.

Заранее спасибо!

1

Решение

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
)
1

Другие решения

Просто сделай просто:

preg_match('/@\S+/', $string, $matches);

Результат в $matches[0]

0

По вопросам рекламы [email protected]