字符串完全匹配的正则表达式


152

我想用正则表达式匹配两个密码。例如,我有两个输入“ 123456”和“ 1234567”,那么结果应该不匹配(假)。当我输入“ 123456”和“ 123456”时,结果应该匹配(正确)。

我无法表达。我该怎么做?


9
在这种情况下,为什么要使用正则表达式?检查(精确)相等性实际上应该在没有正则表达式的情况下完成。
巴特·基尔斯

因为我们查找了如何替换Bash脚本中的文本并获得涉及Perl和regex的答案。
sudo 2015年

具有相同的问题更好的解决方案^(123456)将给出您想要的结果
sdx11


@canbax为什么这确实是一个有趣的问题?
米兰Velebit

Answers:


176

如果您在变量中输入了密码,并且希望精确匹配123456,那么锚点将为您提供帮助:

/^123456$/

在perl中,用于匹配密码的测试将类似于

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

编辑:

巴特·基尔斯Bart kiers)是正确的,为什么不为此使用strcmp()?每种语言都有它自己的方式

第二个想法,您可能需要考虑使用更安全的身份验证机制:)


感谢锚点,我知道但完全没有考虑过:)
vikingsteve 2015年

2
重要提示:在Perl和PCRE中,您需要\z而不是$/^123456$/两者都匹配123456123456后跟换行符,而/^123456\z/仅匹配123456
ikegami,

154

在malfaux的答案中,“ ^”“ $”已用于检测文本的开头和结尾。
这些通常用于检测行的开始和结束。
但是,在这种情况下,这可能是正确的方法。
但是,如果您想匹配一个确切的单词,则更优雅的方法是使用'\ b'。在这种情况下,以下模式将与确切的短语“ 123456”匹配。

/ \ b123456 \ b /


您确定它可以那样工作吗?;)请使用正则表达式测试仪像这样。使用“显示匹配”按钮,您将看到为什么匹配。顺便说一句,记住“。” 是一个特殊的字符,很好逃脱它。(很高兴在拒绝投票前三思:D)。
prageeth

2
如果您认为我的答案有误导性或错误,您仍然可以发布自己的答案(就像其他人一样),或在我的帖子下发表评论以解释您的建议。
prageeth 2014年

26
您的答案具有误导性,并会引起许多人的严重问题。例如,使用您的方法\ bhttp://www.foo.com \ b将匹配http://www.bar.com/?http://www.foo.com,这绝对不是精确匹配,因为在OP中要求。对于使用包含非单词字符的URL或密码(同样是OP要求的)的人们,这将导致严重的问题。您应该澄清您的答案,以免他人误入歧途。
0x1mason 2014年

2
您将不得不解释。'。是红鲱鱼。\ bhttp:// www \ .foo \ .com \ b仍会为http://www.bar.com/?http://www.foo.com生成匹配项。这不是OP想要的。
0x1mason 2014年

1
@ 0x1mason是正确的,\bhttp:\/\/www.foo.com\b它将与http://www.foo.com=?http://www.foo.comURL保持原样匹配。第一个响应,使用^(开始)和$(结束)是通过这些测试的最佳方法:regex101.comregexr.com (包括在下面的链接测试仪是不是很人性化,这些都是要好得多)
twknab

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

这样可以确保您的匹配项前面没有字符,数字或下划线,并且后面没有字符,数字或下划线

因此它将匹配“ abc”,“ abc。”,“ abc”中的“ abc”,但不匹配“ 4abc”或“ abcde”


1
问题的标题具有误导性;他试图确保两个完整的字符串完全相同。另外,\w匹配数字和字母,因此[\w\d]是多余的。
艾伦·摩尔

很好 请参阅regextester.com/?fam=113232以获取“小提琴”,我确实尝试过
不同步

模式周围的()帮助了我。
加扎尔

6

更直接的方法是检查是否相等

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

但是,如果您真的想坚持使用正则表达式,

string1 =~ /^123456$/

@Kurumi我正在尝试使Java代码能够搜索txt文件中的特定单词,并且我想使用regx,所以我可以使用带String.match(/ ^ myword $ /)的模式/ ^ myword $ /来搜索该txt中的单词?
Antwan 2014年

3

您也可以尝试在关键字:的开始和结尾处添加一个空格/\s+123456\s+/i

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.