【问题标题】:Regular expression for exact match of a string字符串精确匹配的正则表达式
【发布时间】:2011-08-10 19:17:16
【问题描述】:

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

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

【问题讨论】:

  • 在这种情况下为什么要使用正则表达式?检查(确切的)相等性应该在没有正则表达式的情况下完成。
  • 因为我们查找了如何替换 Bash 脚本中的文本并得到涉及 Perl 和正则表达式的答案。
  • 遇到同样的问题,更好的解决方案 ^(123456) 将提供您想要的结果
  • Match whole string的可能重复
  • @canbax 为什么这是一个有趣的问题?

标签: regex


【解决方案1】:

如果您在变量中有输入密码,并且想要完全匹配 123456,那么锚点将帮助您:

/^123456$/

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

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

编辑:

bart kiers 是对的,你为什么不使用 strcmp() 呢?每种语言都有它自己的方式

再想一想,您可能需要考虑一种更安全的身份验证机制 :)

【讨论】:

  • 重要提示:在 Perl 和 PCRE 中,您需要 \z 而不是 $/^123456$/ 匹配 123456123456 后跟换行符,而 /^123456\z/ 仅匹配 123456
【解决方案2】:

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

/\b123456\b/

【讨论】:

  • 您确定它以这种方式工作吗? ;) 请使用像this 这样的正则表达式测试器。使用“显示匹配”按钮,您将看到它匹配的原因。顺便说一句,记住'。是一个特殊的字符,很容易逃脱它。 (在否决投票之前三思而后行:D)。
  • 如果您认为我的回答具有误导性或错误,您仍然可以发布您自己的答案(就像其他人一样)或在我的帖子下发表评论,解释您的建议。
  • 您的回答具有误导性,会给很多人带来严重的问题。例如,使用您的方法 \bhttp://www.foo.com\b 将匹配 http://www.bar.com/?http://www.foo.com,这绝对不是 OP 中要求的完全匹配。对于使用包含非单词字符的 URL 或密码(这也是 OP 所要求的)的人来说,这将导致严重的问题。你应该澄清你的答案,以免其他人误入歧途。
  • 你得解释一下。 '。'是一条红鲱鱼。 \bhttp://www\.foo\.com\b 仍会为http://www.bar.com/?http://www.foo.com 生成匹配项。这不是 OP 想要的。
  • @0x1mason 是正确的,\bhttp:\/\/www.foo.com\b 将匹配http://www.foo.com=?http://www.foo.com 以及原样的 URL。第一个响应,使用^(开始)和$(结束)是通过这些测试器的最佳方法:regex101.comregexr.com(下面链接中包含的测试器不是非常用户友好,这些是好多了)
【解决方案3】:
(?<![\w\d])abc(?![\w\d])

这确保您的匹配项前面没有某些字符、数字或下划线,并且后面没有紧跟字符或数字或下划线

所以它将匹配“abc”、“abc.”、“abc”中的“abc”,但不匹配“4abc”或“abcde”

【讨论】:

  • 问题的标题具有误导性;他试图确保两个 整个字符串 完全相同。另外,\w 匹配数字和字母,所以[\w\d] 是多余的。
  • 不错。请参阅regextester.com/?fam=113232 中的“小提琴”我尝试过
  • 如何设计它以匹配带有括号的“(abc)”
【解决方案4】:

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

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

但是,如果你真的想坚持正则表达式,

string1 =~ /^123456$/

【讨论】:

  • @Kurumi 我正在尝试制作在 txt 文件中搜索特定单词的 java 代码,我想使用 regx 所以我可以使用该模式 /^myword$/ 和 String.match(/^ myword$/ ) 来搜索那个 txt 中的单词?
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多