我想写一个正则表达式来查找单词是否长度为3个字符,但前面的 m_
是可选的 . 在这种情况下,需要 m_
,后跟最少3个字符 .
基本上我想要匹配
Abc
或 m_abc
并且不匹配 ab
或 m_ac
(^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$)
我尝试了一个if循环,但它也与文本 m_a
匹配 . 你能帮我解决一下我在这里缺少的东西吗?
也许我写错我的正则表达式 . 我想要一些像if(m_ found)“后面跟着需要3个字符的东西”else“看看总字符数是3”
谢谢 .
3 回答
您可以使用此正则表达式,该表达式要么在开始时需要
m_
,要么禁止它(通过负向预测):见regex tester
如果负面的look-head不是你可以使用的功能,那么你可以选择这个更精细的正则表达式,它通过前两个字符的不同选项:
见regex tester
你想让你的3个字符的单词能够有下划线吗?因为如果没有,那么您可以将
[a-zA-Z0-9_]
更改为[a-zA-Z0-9]
,在这种情况下它不应与m_a
匹配 . 除非你想匹配数字,你可以进一步简化为[a-zA-z]
.主要错误是
^
行锚在可选的括号表达式内 . 你想无条件地开始行,然后是可选的m_?
.您可以显着简化其余部分 . 通过需要三个字符的表达式捕获三个或更多个;无论你是否在输入结束时,正则表达式都将在那一点成功 .
字符类中的下划线似乎有点可疑 . 你真的打算用"word"包含下划线吗?然后
m_ac
也将匹配,因为它至少有三个字符长并且由集合中的字符组成,即使你说它是特别禁止的 .