有关REGEX提取文本之间的问题

时间:2018-10-11 15:35:01

标签: php regex

你好,有人可以帮我吗? 我正在尝试在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循环,但是我不确定是否不可能 与正则表达式 如果有人可以解释我该怎么做,谢谢!

1 个答案:

答案 0 :(得分:1)

不使用REGEXimplode()的{​​{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]]);
?>

演示: https://3v4l.org/hJu52