&引用;example@something.com&引用-&燃气轮机&引用;例如;PHP

&引用;example@something.com&引用-&燃气轮机&引用;例如;PHP,php,regex,Php,Regex,我对正则表达式非常陌生,无法真正理解它是如何工作的。我试过这个: function change_email($email){ return preg_match('/^[\w]$/', $email); } 但这只返回布尔值true或false,我希望它返回@之前的所有内容。 这可能吗?我甚至不认为我在这里使用了正确的php函数。尝试一种更简单的方法: 您想要使用的是strstrstr()函数,您可以阅读该函数 用于获取@字符的位置并裁剪电子邮件: function change_em

我对正则表达式非常陌生,无法真正理解它是如何工作的。我试过这个:

function change_email($email){
   return preg_match('/^[\w]$/', $email);
}
但这只返回布尔值true或false,我希望它返回@之前的所有内容。
这可能吗?我甚至不认为我在这里使用了正确的php函数。

尝试一种更简单的方法:


您想要使用的是strstrstr()函数,您可以阅读该函数

用于获取
@
字符的位置并裁剪电子邮件:

function change_email($email){
    return substr($email, 0, strpos($email, '@'));
}
示例:

<?php

function change_email($email){
    return substr($email, 0, strpos($email, '@'));
}

var_dump( change_email( 'foo@bar.com' )); // string(3) "foo"
var_dump( change_email( 'example.here@domain.net' )); // string(12) "example.here"
var_dump( change_email( 'not.an.email' )); // string(0) ""
通过正则表达式

<?php
$mystring = "foo@bar.com";
$regex = '~^([^@]*)~';
if (preg_match($regex, $mystring, $m)) {
    $yourmatch = $m[1]; 
    echo $yourmatch;
    }
?> //=> foo
/=>foo
正则表达式

.*(?=@)


preg_match中有第三个参数,用于保存匹配项

例如:

preg_match('/(?p[a-zA-Z0-9.]+)@(?p\w+)。\w{2,4}/',$email,$matches)


请注意,电子邮件名称可能只包含字母、数字、下划线和点。如果您想添加一些额外的字符,请将它们添加到字符类-->[a-zA-Z0-9.u其他字符]

这对我很有帮助,谢谢!你能解释一下这里发生了什么吗?[0]代表什么?@user3465900分解函数返回一个数组,因此[0]返回该数组中的第一个元素。
explode
substr
更适合这里。如果您有兴趣了解这个函数,php已经拥有了世界上最好的函数之一。请参见示例代码。如果在
preg\u match
call中使用第三个参数,则可以使用匹配项。电子邮件地址可能更复杂。虽然您不太可能在野外遇到这样的问题,但请记住,电子邮件地址可能包含多个
@
符号@用户3465900请接受帮助您的答案。如果你得到了问题的答案,不要让答案不被接受。我喜欢检查是否正确,以确保它至少有@符号。真实的电子邮件地址可以包含各种内容。。。即使是引号内的空格@就像我说的,如果你愿意,你可以添加其他角色。如果您想留出空间,可以使用[a-zA-Z0-9.\uS]。无论如何,我不知道任何有空格的电子邮件地址。:)同意,我只是把警告说出来。我尝试使用
用户的Gmail功能+whateveryouwant@gmail.com
一直都是,它经常失败,因为某人的正则表达式不完整。
<?php
$mystring = "foo@bar.com";
$regex = '~^([^@]*)~';
if (preg_match($regex, $mystring, $m)) {
    $yourmatch = $m[1]; 
    echo $yourmatch;
    }
?> //=> foo
.*(?=@)
$re = "/.*(?=@)/"; 
$str = "example@something.com"; 

preg_match($re, $str, $matches);
If $email = 'hello@gmail.com'
$matches['email_name'] will be equal to "hello"
$mathces['email_type'] will be equal to "gmail"