2011-04-22 55 views
72

我想用正則表達式匹配兩個密碼。例如我有兩個輸入「123456」和「1234567」,那麼結果應該不匹配(錯誤)。當我輸入「123456」和「123456」時,結果應該匹配(true)。一個詞的完全匹配的正則表達式

我無法表達。任何人都可以幫助我嗎?

+7

爲什麼你要在這種情況下,正則表達式?檢查(確切)相等應該不用正則表達式。 – 2011-04-22 06:26:28

+0

因爲我們查找如何替換Bash腳本中的文本並獲得涉及Perl和正則表達式的答案。 – sudo 2015-08-01 19:11:00

+0

有相同的問題一個更好的解決方案^(123456)會給你想要的結果 – sdx11 2016-12-21 17:48:57

回答

91

,如果你有一個變量,輸入密碼,並要嚴絲合縫123456然後錨將幫助您:

/^123456$/ 
在Perl

測試匹配的密碼會像

print "MATCH_OK" if ($input_pass=~/^123456$/); 

編輯:

bart kiers是正確的壽,你爲什麼不使用這個的strcmp()?每一種語言都有它自己的方式

的第二個想法,你可能要考慮一個更安全的身份驗證機制:)

+0

供參考:對我來說,只有^ 123456 $在下面鏈接的測試儀中工作。 – Tilo 2013-11-06 17:43:47

+0

感謝您的錨,我知道,但完全沒有考慮到它:) – vikingsteve 2015-12-02 11:47:30

4

一種更直接的方法是檢查平等

if string1 == string2 
    puts "match" 
else 
    puts "not match" 
end 

然而, ,如果你真的要堅持正則表達式,

string1 =~ /^123456$/ 
+0

@Kurumi我想使java代碼搜索txt文件中的特定單詞,我想使用regx,所以我可以使用該模式/^myword $ /用String.match(/^myword $ /)搜索該文本中的單詞? – Tony 2014-03-30 00:45:37

2

你也可以嘗試在關鍵字的開頭和結尾追加一個空格:/\s+123456\s+/i

+0

我無法通過以下方法使用'\ s'獲得此方法:https://regex101.com/ – natureminded 2017-02-11 11:29:10

77

在malfaux的回答中'^''$'已用於檢測文本的開始和結束。
這些通常用於檢測行的開始和結束。
但是,在這種情況下,這可能是正確的方法。
但是如果你想匹配一個確切的單詞,更優雅的方式是使用'\ b'。在這種情況下,以下模式將匹配確切的短語'123456'。

/\ b123456 \ B/

+0

您確定它以這種方式工作嗎? ;)請使用像[this]這樣的正則表達式測試程序(http://www.regular-expressions.info/javascriptexample.html)。使用「顯示匹配」按鈕,你會看到它匹配的原因。順便記住'。'是一個特殊的字符,很好的逃避它。 (並且在投票前投票:D)。 – prageeth 2013-09-29 03:16:35

+0

如果用戶試圖對字符串(如URI或密碼)進行精確匹配(後者是OP的主題),並且通常包含非單詞字符,則可能會導致人們在其程序中引入錯誤。我在生產代碼中看到了這個錯誤 - 它不好。如果你不允許我澄清你的答案,請自己做。 – 0x1mason 2014-01-01 16:30:30

+1

如果您認爲我的答案有誤導性或錯誤,您仍然可以發佈自己的答案(與其他人一樣)或在我的帖子下發表評論以解釋您的建議。 – prageeth 2014-01-02 05:03:49

18
(?<![\w\d])abc(?![\w\d]) 

這可以確保你的對手不是由某些字符,數字前面或下劃線而不是由字符或數字緊隨其後,或下劃線

,因此將匹配 「ABC」, 「ABC」, 「ABC」, 「ABC」,而不是 「4abc」,也不是 「ABCDE」

+1

問題的標題是誤導性的;他試圖確保兩個*完整的字符串*完全相同。此外,'\ w'匹配數字以及字母,因此'[\ w \ d]'是多餘的。 – 2014-04-17 02:54:24

相關問題