180
votes

I want to match two passwords with regular expression. For example I have two inputs "123456" and "1234567" then the result should be not match (false). And when I have entered "123456" and "123456" then the result should be match (true).

I couldn't make the expression. How do I do it?

5
Why do you want regex in this case? Checking for (exact) equality should really be done without regex.Bart Kiers
Because we look up how to replace text in a Bash script and get an answer that involves Perl and regex.sudo
having the same issue a better solution ^(123456) will give the results that you wantsdx11
Possible duplicate of Match whole stringOmer
@canbax Why would this be a funny question exactly?Milan Velebit

5 Answers

202
votes

if you have a the input password in a variable and you want to match exactly 123456 then anchors will help you:

/^123456$/

in perl the test for matching the password would be something like

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

EDIT:

bart kiers is right tho, why don't you use a strcmp() for this? every language has it in its own way

as a second thought, you may want to consider a safer authentication mechanism :)

171
votes

In malfaux's answer '^' and '$' has been used to detect the beginning and the end of the text.
These are usually used to detect the beginning and the end of a line.
However this may be the correct way in this case.
But if you wish to match an exact word the more elegant way is to use '\b'. In this case following pattern will match the exact phrase'123456'.

/\b123456\b/

41
votes
(?<![\w\d])abc(?![\w\d])

this makes sure that your match is not preceded by some character, number, or underscore and is not followed immediately by character or number, or underscore

so it will match "abc" in "abc", "abc.", "abc ", but not "4abc", nor "abcde"

7
votes

A more straight forward way is to check for equality

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

however, if you really want to stick to regular expression,

string1 =~ /^123456$/
4
votes

You may also try appending a space at the start and end of keyword: /\s+123456\s+/i.