Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如果还有其他失败的正则表达式_Regex - Fatal编程技术网

Regex 如果还有其他失败的正则表达式

Regex 如果还有其他失败的正则表达式,regex,Regex,我想写一个正则表达式来确定单词的长度是否为3个字符,但前面的m是可选的。在这种情况下,m后跟至少3个字符是必需的 基本上我想要匹配 Abc或m_Abc和ab或m_ac (^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$) 我尝试了一个if循环,但它也与文本ma匹配。 你能帮我看看我这里缺什么吗 也许我的正则表达式写错了。 我想要像这样的东西 如果(找到) “后跟3个字符(必需)” 其他的 “查看总字符数是否为3” 谢谢。您想让您的3个字符的单词中有下划

我想写一个正则表达式来确定单词的长度是否为3个字符,但前面的
m
是可选的。在这种情况下,
m
后跟至少3个字符是必需的

基本上我想要匹配

Abc
m_Abc
ab
m_ac

(^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$)
我尝试了一个if循环,但它也与文本
ma
匹配。 你能帮我看看我这里缺什么吗

也许我的正则表达式写错了。 我想要像这样的东西 如果(找到) “后跟3个字符(必需)” 其他的 “查看总字符数是否为3”


谢谢。

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

您可以使用此正则表达式,该正则表达式在开始时需要
m
,或者禁止使用它(通过负向前看):

如果负像头不是您可以使用的功能,那么您可以使用这个更复杂的正则表达式,它为前两个字符提供了不同的选项:

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

请参见

主要错误是,
^
线锚位于可选括号表达式内。您希望无条件地以行开头,后跟可选的
m?

您可以显著简化其余部分。需要三个字符的表达式捕获三个或更多字符;无论您是否在输入的末尾,正则表达式都将在该点成功

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

character类中的下划线似乎有点可疑。你真的想让一个“单词”包含下划线吗?然后,
m_ac
也将匹配,因为它至少有三个字符长,并且由集合中的字符组成,即使您说它是明确禁止的。

由于您将
^
设置为可选,所以出现了问题。您使用的是哪种语言或正则表达式解析器?您提供的示例似乎是ERE,但如果您的解析器支持PCRE,您将可以使用更多选项……感谢您的回复。是的,我的要求也是匹配。它用于检测代码是否按照标准编写。像“Test_Val”这样的变量是validAh,好的。在这种情况下,为什么
m_a
不是有效的变量名?如果首先找到m_,那么它后面应该跟3个字符。如果没有找到,那么正如你说的是的,我们可以允许像a_b这样的东西。非常感谢它的工作。但是对不起,我还有更多的问题要问。我认为如果我知道基本知识,我可以扩展,但我不能扩展。是否也可以添加g_u。这就像m或g被允许用
g
扩展:
^(m|g|(?!m|)(?!g|))\w{3,}$
或更短的:
^([mg]|(?![mg]|))\w{3,}$
^(m_)?[a-zA-Z0-9_]{3}