Regular expression for exact match of a string
我想用正则表达式匹配两个密码。例如,我有两个输入"123456"和"1234567",那么结果应该不匹配(错误)。当我输入"123456"和"123456"时,结果应该是匹配的(真的)。
我无法表达。我该怎么做?
- 在这种情况下,你为什么想要Regex?在没有regex的情况下,应该检查(精确)相等性。
- 因为我们查找了如何替换bash脚本中的文本,并得到了一个涉及perl和regex的答案。
- 同样的问题,一个更好的解决方案^(123456)将提供您想要的结果。
- 匹配整个字符串的可能重复项
如果您在变量中有输入密码,并且希望与123456完全匹配,那么锚定将帮助您:
在Perl中,匹配密码的测试类似于
1
| print"MATCH_OK" if ($input_pass=~/^123456$/); |
号
编辑:
巴特·基尔斯是对的,你为什么不用strcmp()呢?每种语言都有它自己的方式
第二种想法是,您可能需要考虑更安全的身份验证机制:)
- 仅供参考:对于我而言,^123456$在下面链接的测试仪中有效。
- 感谢主持人,我知道,但完全没有考虑过。)
在马尔福的回答中,"^"和"$"被用来检测文本的开头和结尾。
这些通常用于检测行首和行尾。
但在这种情况下,这可能是正确的方法。
但是如果您希望匹配一个精确的单词,则更优雅的方法是使用''。在这种情况下,下面的模式将与确切的短语"123456"匹配。
/\b123456\b/
号
- 你确定它是那样工作的吗?;)请使用这样的regex测试仪。使用"显示匹配"按钮,您将看到匹配的原因。顺便说一句,记住"."是一个特殊的字符,很好地避开它。(在投票前三思而后行:d)。
- 您超越了我的编辑,如果人们试图与通常包含非文字字符的字符串(如uri或密码(后者是op的主题))进行精确匹配,可能会导致人们将错误引入他们的程序。我在生产代码中看到过这个bug——它不好。如果你不允许我澄清你的答案,请你自己澄清。
- 如果你认为我的回答是误导或错误的,你仍然可以发表你自己的回答(就像其他人一样),或者在我的帖子下发表评论来解释你的建议。
- 你的回答有误导性,会给很多人带来严重的问题。例如,使用您的方法htp://www.foo.com将匹配http://www.bar.com/?http://www.foo.com,这绝对不是一个确切的匹配,如操作中所要求的。这将给使用包含非文字字符的URL或密码(同样,这也是操作要求的)的人带来严重的问题。你应该澄清你的答案,这样其他人就不会误入歧途。
- @0x1原因再次阅读我的第一条评论。但它仍然100%有效。
- 你得解释一下。"是一条红鲱鱼。 bhtp://www.foo.com仍然为http://www.bar.com/生成匹配项?http://www.foo.com.这不是手术室想要的。
- 一个更简单的错误匹配示例是 foo匹配www.foo.com。和 foo 匹配条foo条。它一直在持续。当OP需要/不需要/匹配时,它们都会产生匹配。
- @0x1原因是正确的,\bhttp:\/\/www.foo.com\b将与http://www.foo.com=?http://www.foo.com和URL匹配。第一个响应,使用^(开始)和$(结束)是通过这些测试人员的最佳方法:regex101.com和regexr.com(下面链接中包含的测试人员不是非常友好的用户,这些更好)
1
| (?<![\w\d])abc(?![\w\d]) |
这可以确保您的匹配前面没有字符、数字或下划线,后面没有字符、数字或下划线。
因此,它将匹配"abc"、"abc."、"abc"中的"abc",但不匹配"4abc",也不匹配"abcde"
- 这个问题的标题有误导性;他试图确保两个字符串完全相同。另外,\w既匹配数字,也匹配字母,所以[\w\d]是多余的。
更直接的方法是检查是否平等
1 2 3 4 5
| if string1 == string2
puts"match"
else
puts"not match"
end |
但是,如果你真的想坚持正则表达式,
。
- KuruMi我正在尝试用Java代码搜索TXT文件中的特定单词,我想使用Rexx,所以我可以使用那个模式/^ MyWord $/OnString吗?匹配(//MyWord $ /)来搜索TXT中的单词吗?
您也可以尝试在关键字:/\s+123456\s+/i的开头和结尾添加空格。
- 我无法通过:regex101.com使用\s使这种方法工作。