你好,有人可以帮我吗? 我正在尝试在php中获得类似这样的内容:
$ mail =“ fakemail@le.mail.uk.test”; $ rep =“ le.mail”;
我尝试过这样:
function test($mail) {
$pattern = '/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/';
preg_match($pattern, $mail, $matches);
echo $matches[2] . "\n";
}
test("fakemail@le.mail.uk");
// result = le.mail
但是如果我还有另一个“。”在我的邮件中,这完全打破了
function test($mail) {
$pattern = '/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/';
preg_match($pattern, $mail, $matches);
echo $matches[2] . "\n";
}
test("fakemail@le.mail.uk.test.test");
//result = le.mail.uk.test.test.test
// whatIwant = le.mail
或者我只想要所有字符beetwen @,直到下一个“。” 我想我必须用if循环,但是我不确定是否不可能 与正则表达式 如果有人可以解释我该怎么做,谢谢!
答案 0 :(得分:1)
不使用REGEX
和implode()
的{{1}}的php方式
explode()
输出:
<?php
$sep = '.';
$str1 = 'email@test.com.robot';
$str2 = 'email@test.fr.uk.robot';
$get1 = explode($sep,explode('@',$str1)[1]);
$get2 = explode($sep,explode('@',$str2)[1]);
echo implode($sep,[$get1[0],$get1[1]]);
echo PHP_EOL;
echo implode($sep,[$get2[0],$get2[1]]);
?>