$re = '/(.*)@(?!gmail)\w+\.com/';
$str = '# 配對電子郵件
# 題目說明區塊
請幫我抓出@(小老鼠)前面的帳戶名稱,而且我不要 gmail 的。
#欲測試資料集
foobar@gmail.com
NoOneCareMe@gamil.com
SaveTheWorld@hotmail.com
zzzGroup@yahoo.com
eagle1963@gmail.com
maythefourthwithyiu@starwars.com
# 應配對結果(亮色區塊)
NoOneCareMe@gamil.com
SaveTheWorld@hotmail.com
zzzGroup@yahoo.com
maythefourthwithyiu@starwars.com
# (選項)寫上註解,好好說明你怎麼想的
首先將 @ 之前的文字都抓起來,所以放上(),因為不想顧及裡面的文字是什麼,所以很懶惰的使用 .*,步驟多了點但是我不在意XD,因為不想要 gmail 所以我再任意文字 \\w+ 前面判斷寫上不是 gmail,最後放上 \\.com來玩成此次配對,希望你可以幫我減少更多 step(步驟),來提高這個規則的效率。
# (選項)將你的 Regex 註解起來,使用 Extended Formating
/ # Start of Regex
( # Group and Capturing follwoing
.* # Match any form zero-to-many
) # End of group
@ # Match @
( # Group and Capturing follwoing
?! # Negative lookahead
gmail # Match Gmail
) # End of group
\\w+ # Match any character from one-to-many
\\. # Match .(dot)
com # Match com
/ # End of Regex';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php