我有以下正则表达式模式,我想确保它只匹配与字母数字字符串匹配的正则表达式。
^\/\[(A\-Z|a\-z|0\-9){1}(?!\1)(A\-Z|a\-z|0\-9){1}(?!\2)(A\-Z|a\-z|0\-9){1}\]\/
如果没有正确使用字符范围,则不使用字符范围。
^\/\[(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}(?!\1)(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}(?!\2)(abcdefghijklmnopqrstuvwxyz|0123456789|ABCDEFGHIJKLMNOPQRSTUVWXYZ){1}\]\/
我有一个CTF挑战,让其类编写与字母数字字符串匹配的regex模式。我意识到不需要完整的字符,但是如果它们不立即考虑字符范围,我不希望它们失败。我在扩展模式下使用sed手动运行它,并在regexr上在线运行,但我担心自己可能会错过一些东西。
如果它们不使用字符范围,则第二个正则表达式模式是第二个标志。
这不是“代码高尔夫”风格的问题,或者至少对我而言不是。我有一个模式,我只需要验证没有奇怪的,晦涩的正则表达式技巧可以产生一个有效的正则表达式模式,该模式可以执行我告诉他们的操作,而我没有通过前面的两个模式进行介绍。
我应该说,我添加了一个附加的正则表达式模式(因为CTFd允许多个)可以按任何顺序匹配\ w \ d。
答案 0 :(得分:1)
我猜测您可能正在尝试编写类似于以下内容的表达式:
^\/\[([A-Za-z0-9])(?!\1)([A-Za-z0-9])(?!\2)([A-Za-z0-9])\]\/
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式:
答案 1 :(得分:1)
您的正则表达式仅匹配:/[A-Za-z0-9]/
,不带锚和量词,建议您:
^\/\^?(?:\[(A-Z|a-z|0-9)(?!\1)(A-Z|a-z|0-9)(?!\1)(?!\2)(A-Z|a-z|0-9)\]|\[\^\\W_])[+*?]?\$?\/
匹配带有可选锚和可选量词的字母数字正则表达式,还匹配含义相同的短正则表达式/[^\W_]/
(即非单词和下划线)
/[A-Za-z0-9]/
/[A-Za-z0-9]+/
/[A-Za-z0-9]*/
/^[A-Za-z0-9]/
/[A-Za-z0-9]$/
/^[A-Za-z0-9]+$/
/^[A-Za-z0-9]*$/
/^[A-Za-z0-9]?$/
/^[^\W_]+$/