2016-07-05 50 views
2

工作了所有輸入我使用在C以下的正則表達式++正則表達式不是在C++

std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?"); 

它拒絕德follwoing輸入

[email protected] 

在Java和JS同樣的作品。有人expalin

+0

在我的測試中,僅僅匹配這個測試,regex_match函數返回真值。 –

+0

什麼編譯器/版本? – marcinj

+0

visual studio 2010 – vijin

回答

0

我試着用vs2010和vs2015你的正則表達式。在vs2010中,比賽失敗,2015年不會。所以我認爲是vs2010實現的一個bug。 如果你嘗試一點不同的正則表達式:

std::regex base_regex("[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9]+\\.)+[A-Za-z0-9]+"); 

它的工作原理。 我簡化了表達式。相反的:

[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])? 

我用

[A-Za-z0-9]+ 

這是不相等的,因爲它接受「 - 」在開頭或域/子域名的結束,但也許它會替你安排。