我有以下正則運算式模式可以在我的代碼中查找電子郵件地址:
/[\._a-zA-Z0-9-] @[\._a-zA-Z0-9-]{8,}/i
我想確保它不匹配某個字串,如果它包括:
abc
xyz
只是為了排除我嘗試過的 abc:
/(?!.*abc)[\._a-zA-Z0-9-] @[\._a-zA-Z0-9-]{8,}/i
但這是非常緩慢的。
uj5u.com熱心網友回復:
您需要以最佳方式將正則運算式“錨定”到正則運算式引擎可以找到的位置。最好的方法是將它“系結”到單詞邊界位置,這應該在這里作業,因為電子郵件以單詞字符開頭:
/\b(?!\S*abc)[\w.-] @[\w.-]{8,}/i
順便說一句,在 JavaScript regex 中[_a-zA-Z0-9]等于\w。詳情:
\b- 一個詞的邊界(?!\S*abc)- 如果有零個或多個非空白字符,則匹配失敗的負前瞻,然后abc立即位于當前位置的右側[\w.-]- 一個或多個單詞.或-字符@- 一個@字符[\w.-]{8,}- 八個或更多單詞.或-字符。
uj5u.com熱心網友回復:
您可以分兩步完成。使用正則運算式查找電子郵件地址,然后檢查它是否不包含任何禁止的字串。
if (preg_match('/[\._a-zA-Z0-9-] @[\._a-zA-Z0-9-]{8,}/i', $text, $match) && !preg_match('/abc|xyz/i', $match[0])) {
$email = $match[0];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377506.html
標籤:正则表达式
上一篇:洗掉級別<30的所有行
