我的输入正在关注
1等等@username_。 sblah sblah sblah
我需要的输出如下 用户名_。
现在,我做这个表情
^.*\@([a-zA-Z0-9\.\_]+)$
可用于以下
1等等@username _。
但是如果我将其用于整行,则无法正常运行
因此它获得用户并在用户之前删除 但是一旦获得用户
,我将如何删除其余部分请注意,如果您有更好的工具,请使用regex101进行测试,请在下面编写。
答案 0 :(得分:1)
您的模式使用^$
,这意味着它需要完全匹配,而您的模式只是部分匹配。
通过添加.*
,它变成一个完整的正则表达式,并且符合预期。
"/^.*\@([a-zA-Z0-9\.\_]+).*$/"
std::all_of(s.begin(), s.end(), isspace))
另一种方法是使用这样的部分正则表达式。
它会跳过所有内容直到@,然后将所有内容捕获到一个点
$str = "1 blah blah blah @username_. sblah sblah sblah";
preg_match("/.*?\@(.*?\.)/", $str, $match);
var_dump($match);
答案 1 :(得分:0)
要与示例数据中的用户名匹配,您可以preg_match并省略$
来声明字符串末尾的位置,如本demo所示。请注意,您不必在字符类中转义@
以及点和下划线。
要在示例数据中获取用户名,您还可以使用:
@\K[\w.]+
那将匹配
@
字面上匹配\K
忘记以前匹配的内容[\w.]+
匹配一个单词或一个点1次以上$re = '/@\K[\w.]+/';
$str = '1 blah blah blah @username_. sblah sblah sblah @test';
preg_match($re, $str, $matches);
echo $matches[0]; // username_.