2016-12-05 18 views
3

鑑於一系列字符串:正則表達式用雙重否定匹配

  • error.user
  • 成功
  • success.user
  • success.admin

我想寫一個正則表達式可以匹配任何不以error開頭的東西,也沒有.user。因此,對於這個名單,successsuccess.admin

我已經得到了迄今:/^((?!error)\w*)((?!\.*user)\w*)/

第一部分:((?!error)\w*)工作正常,並縮小了比賽,與success開始只是字符串。由於某些原因,第二部分:完全沒有做。我認爲第一部分匹配得太多了。

我在PHP這樣做/ PCRE
這裏是我的regex101.com鏈接:https://regex101.com/r/l2sZru/1

回答

2

你需要修復你的負面的正則表達式是這樣的:

^(?!error|.*\.user)[\w.]+$ 

RegEx Demo

這裏如果error處於開始位置,或者如果.user`在輸入中的任何位置找到,則(?!error|.*\.user)將聲明失敗。

(?!\.*user)在您的正則表達式意味着當輸入有0個或多個DOT後跟着user僅在開始時斷言失敗。

+1

非常感謝!我會在7分鐘內接受你的回答。 – Pickle

+1

編寫'^(?! error |。* \。user)[\ w。] + $' –

+0

是更短是的,謝謝它更短 – anubhava