我的文字的字符串看起來像這樣的用戶名:使用正則表達式來提取電子郵件地址
[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