import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(.*)@(?!gmail)\\w+\\.com";
final String string = "# 配對電子郵件\n\n"
+ "# 題目說明區塊\n"
+ "請幫我抓出@(小老鼠)前面的帳戶名稱,而且我不要 gmail 的。\n\n"
+ "#欲測試資料集\n\n"
+ "foobar@gmail.com\n"
+ "NoOneCareMe@gamil.com\n"
+ "SaveTheWorld@hotmail.com\n"
+ "zzzGroup@yahoo.com\n"
+ "eagle1963@gmail.com\n"
+ "maythefourthwithyiu@starwars.com\n\n"
+ "# 應配對結果(亮色區塊)\n"
+ "NoOneCareMe@gamil.com\n"
+ "SaveTheWorld@hotmail.com\n"
+ "zzzGroup@yahoo.com\n"
+ "maythefourthwithyiu@starwars.com\n\n"
+ "# (選項)寫上註解,好好說明你怎麼想的\n"
+ "首先將 @ 之前的文字都抓起來,所以放上(),因為不想顧及裡面的文字是什麼,所以很懶惰的使用 .*,步驟多了點但是我不在意XD,因為不想要 gmail 所以我再任意文字 \\w+ 前面判斷寫上不是 gmail,最後放上 \\.com來玩成此次配對,希望你可以幫我減少更多 step(步驟),來提高這個規則的效率。\n\n"
+ "# (選項)將你的 Regex 註解起來,使用 Extended Formating\n"
+ "/ # Start of Regex\n"
+ " ( # Group and Capturing follwoing\n"
+ " .* # Match any form zero-to-many\n"
+ " ) # End of group\n\n"
+ " @ # Match @\n\n"
+ " ( # Group and Capturing follwoing\n"
+ " ?! # Negative lookahead\n"
+ " gmail # Match Gmail\n"
+ " ) # End of group\n\n"
+ " \\w+ # Match any character from one-to-many\n"
+ " \\. # Match .(dot)\n"
+ " com # Match com\n"
+ "/ # End of Regex";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
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 Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html