首页 文章

如果没有正则表达式失败

提问于
浏览
3

我想写一个正则表达式来查找单词是否长度为3个字符,但前面的 m_ 是可选的 . 在这种情况下,需要 m_ ,后跟最少3个字符 .

基本上我想要匹配

Abcm_abc 并且不匹配 abm_ac

(^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$)

我尝试了一个if循环,但它也与文本 m_a 匹配 . 你能帮我解决一下我在这里缺少的东西吗?

也许我写错我的正则表达式 . 我想要一些像if(m_ found)“后面跟着需要3个字符的东西”else“看看总字符数是3”

谢谢 .

3 回答

  • 2

    您可以使用此正则表达式,该表达式要么在开始时需要 m_ ,要么禁止它(通过负向预测):

    ^(m_|(?!m_))\w{3,}$
    

    regex tester

    如果负面的look-head不是你可以使用的功能,那么你可以选择这个更精细的正则表达式,它通过前两个字符的不同选项:

    ^(m_\w{3,}|m[A-Za-z0-9]\w+|[A-Za-ln-z0-9]\w{2,})$
    

    regex tester

  • 0

    你想让你的3个字符的单词能够有下划线吗?因为如果没有,那么您可以将 [a-zA-Z0-9_] 更改为 [a-zA-Z0-9] ,在这种情况下它不应与 m_a 匹配 . 除非你想匹配数字,你可以进一步简化为 [a-zA-z] .

  • 0

    主要错误是 ^ 行锚在可选的括号表达式内 . 你想无条件地开始行,然后是可选的 m_? .

    您可以显着简化其余部分 . 通过需要三个字符的表达式捕获三个或更多个;无论你是否在输入结束时,正则表达式都将在那一点成功 .

    ^(m_)?[a-zA-Z0-9_]{3}
    

    字符类中的下划线似乎有点可疑 . 你真的打算用"word"包含下划线吗?然后 m_ac 也将匹配,因为它至少有三个字符长并且由集合中的字符组成,即使你说它是特别禁止的 .

相关问题