我的文字的字符串看起来像这样的用户名:使用正则表达式来提取电子邮件地址
[email protected] (John Doe)
我需要得到公正的@,并没有别的之前的部分。如果有任何问题,文本来自简单的XML对象。
我的代码看起来是这样的:
$authorpre = $key->{"author"};
$re1 = '((?:[a-z][a-z]+))';
if ($c = preg_match_all ("/".$re1."/is", $authorpre, $matches))
{
$author = $matches[1][0];
}
有时用户名可能有号码或@符号前面的下划线,这哪里是正则表达式停止它似乎。
你的正则表达式的外捕获组'()'和内部非捕获组'(:)'。考虑到您想要捕捉内部内容,内部非捕获组可能是不必要的。 '[a-z]'表示捕获一个小写字母。 '[a-z] +'表示捕获一个或多个小写字母。因此,有效地表达意味着捕获长度为2个或更多个小写字母的任何内容。如果要在表达式的前面放置一个'^',它将确保匹配只从文本的_beginning_开始。 – 2009-11-25 17:04:45
我恐惧不会很好玩。您可能想要测试的一些示例字符串:'“John Doe”@ example.com(John Doe)','“(>'.')>"@example.com(John Doe)','foo @ [192.168。 2.1](John Doe)','^.^@example.com(John Doe)','"[email protected]@c"@example.com(John Doe)“'是的,这些都是有效的电子邮件地址:-) – Joey 2009-11-25 17:06:18
@Johannes:'"[email protected]@c"@example.com(John Doe)'是真的允许吗?这真的让事情变得复杂...... – Welbog 2009-11-25 17:08:05