[英]Regex match first email address that isn't a specified email address
我有一個包含一個或多個電子郵件地址的字符串,我想使用正則表達式查找不是指定電子郵件地址的第一個電子郵件地址。 例如,如果我的字符串包含一個或多個通用形式的某人電子郵件地址,形式為someone@somedomain.com,但也可能包含一個或多個出現的特定電子郵件地址,其確切地等於specificperson@anotherdomain.com,那么我如何找到第一個電子郵件地址匹配第一種形式,不是第二種形式? 或者換一種說法,我想要的第一個電子郵件地址不是specialperson@anotherdomain.com。 所有電子郵件地址可以按任何順序排列。
與任何電子郵件地址匹配的正則表達式為\\w+@\\w+\\.\\w{3}
。
然后(在此正則表達式剛剛匹配之后),您可以在后面使用否定性查找來排除“禁止”地址,例如(?<!particularperson@anotherdomain\\.com)
。
因此整個正則表達式可以是:
\w+@\w+\.\w{3}(?<!particularperson@anotherdomain\.com)
當然,不確定您的正則表達式是否支持否定的后備(例如JavaScript不支持),但您未指定。
注意:您不能對禁止的地址使用否定的超前查詢,然后再對正則表達式進行匹配以匹配任何地址。 原因是,在否定的超前匹配(找到了禁止的地址)之后,正則表達式處理器將一個字符向前移動,然后從該位置開始下一個嘗試,此匹配的頭將不匹配。 因此,匹配任何地址的正則表達式將匹配禁止的地址,而不僅僅是第一個字符。
如果最后一部分可變( .co
, .com
和其他),請嘗試一些不同的方法。
您不能編寫例如.com?
在后面,因為它不允許可變的圖案長度。
相反,您可以在最后一部分 (無論它是什么) 之前放在否定的后面,並僅檢查particularperson
人和anotherdomain
(在適當的位置加上@
和.
)。
另外兩個補充:
(?!\\.\\w)
。 \\b
開頭,以單詞boudary開頭 因此,更正后的正則表達式可以是:
\b\w+@\w+\.(?<!particularperson@anotherdomain\.)\w{2,3}(?!\.\w)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.