【问题标题】:RegEx pattern that matches all possible variants of a regex pattern that matches a pattern匹配正则表达式模式的所有可能变体的正则表达式模式
【发布时间】:2019-09-19 01:22:47
【问题描述】:

我有以下正则表达式模式,我想确保它只匹配匹配字母数字字符串的正则表达式。

^\/\[(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 chal,它的类编写了一个匹配字母数字字符串的正则表达式模式。我意识到不需要完整的字符,但如果他们不立即考虑字符范围,我不希望它们失败。我在扩展模式下使用 sed 手动运行它,并在线运行正则表达式,但我担心我可能错过了一些东西。

第二个正则表达式模式是第二个标志,以防它们不使用字符范围。

这不是一个“代码高尔夫”风格的问题,或者至少对我来说不是。我有一个模式,我只需要验证没有奇怪的晦涩正则表达式技巧会产生一个有效的正则表达式模式,该模式执行我告诉他们做的事情,我没有通过前面的两个模式介绍。

我应该说我添加了一个额外的正则表达式模式(因为 CTFd 允许多个模式)以任何顺序匹配 \w\d。

【问题讨论】:

    标签: regex


    【解决方案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_]+$/
    

    Demo

    【讨论】:

    • 这就是我想要的。我知道还有其他我没有想到的正则表达式模式。我不希望学生做任何事情,而不仅仅是/[A-Za-z0-9]/,但我想覆盖我的基础。
    • @133794m3r:我刚刚更正了,在最后一组之前必须使用(?!\1)(?!\2),除非它匹配/[a-zA-Za-z]/
    • 我在测试中也没有发现这一点。当我以前这样做时,我不必在最后做 (?!\1)(?!\2) ,因为由于某种原因它以前不匹配任何重复模式。
    • 好吧,我没有正确输入正则表达式。我完全忘记了第二个不匹配的前瞻参考。我本来想把它包括在内,但我是个笨蛋。谢谢您的帮助。我将把你的 RegEx 的骨架用于需要学生执行 RegEx 的其他标志。我认为学生们甚至不会知道前几个标志的 +$*^,因为他们将在 CTF 开放之前在课堂上学习 RegEx。
    【解决方案2】:

    我猜你可能想写一些类似于:

    ^\/\[([A-Za-z0-9])(?!\1)([A-Za-z0-9])(?!\2)([A-Za-z0-9])\]\/
    

    Demo


    如果您希望简化/修改/探索表达式,在regex101.com 的右上角面板中已对此进行了说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入匹配。


    正则表达式电路

    jex.im 可视化正则表达式:

    【讨论】:

    • 你的不符合我的要求。我希望它匹配他们用正则表达式编写的任何字母数字字符串模式。所以它会有匹配/[A-Za-z0-9]/。或者如果他们这样做的话,就是完整的字符集。我还修改了字符集链以利用 \w\d 可选字符集,并制作了一个具有两个捕获组和引用的字符集。我的问题是我想匹配匹配模式的正则表达式模式。您的与以下完全有效的正则表达式模式不匹配。 /[A-Z0-9a-z]/。我应该说我喜欢那个可视化器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多