C# .NET正则表达式匹配
概括地说:如何将一个单词与a)开头、b)整个单词和c)结尾的正则表达式规则相匹配 更具体地说:如何匹配具有以下规则的长度>=1的表达式:C# .NET正则表达式匹配,c#,regex,matching,C#,Regex,Matching,概括地说:如何将一个单词与a)开头、b)整个单词和c)结尾的正则表达式规则相匹配 更具体地说:如何匹配具有以下规则的长度>=1的表达式: 它不能有以下任何内容:!@# 它不能以空格或空格开头= 它不能以空格结尾 我试过: ^[^\s=][^!@#]*[^\s]$ 但是匹配的^[^\s=]将超过单词中的第一个字符。因此,这也匹配以“!”开头的单词或“@”或“#”(如“#ab”或“@aa”)。这还强制单词至少有2个字符(一个开头字符不是空格或=,另一个结尾字符是非空格) 我必须: ^[^\s=(!
^[^\s=][^!@#]*[^\s]$
但是匹配的^[^\s=]
将超过单词中的第一个字符。因此,这也匹配以“!”开头的单词或“@”或“#”(如“#ab”或“@aa”)。这还强制单词至少有2个字符(一个开头字符不是空格或=,另一个结尾字符是非空格)
我必须:
^[^\s=(!@#)]\1*$
对于匹配前两个规则的正则表达式。但是如何将单词中没有尾随空格与允许长度为1的单词进行匹配?您的第一次尝试非常接近。您只需为第一部分和最后两部分排除更多字符,并将最后两部分设置为可选:
^[^\s=!@#](?:[^!@#]*[^\s!@#])?$
这样可以确保所有三个部分都不包含任何@#代码>。然后,如果单词的长度超过一个字符,则需要以not空格结尾,中间的空格只填充选定字符。由于^
和$
锚定,这一切都得到了正确实施
我不太确定您的第二个示例是否匹配,因为()
在嵌入字符类时应该作为文字字符,而不是作为捕获组。Cameron的解决方案既准确又高效(并且应该用于需要优化速度的任何生产代码)。这里给出的答案效率较低,但演示了使用正则表达式应用逻辑的一般方法
您可以使用多个正向和负向lookahead正则表达式断言(所有断言都应用于目标字符串中的一个位置,通常是开头),为匹配应用多个逻辑约束。下面注释的正则表达式演示了对于这个示例来说这是多么容易。您确实需要了解正则表达式引擎实际上是如何匹配(和不匹配)的,以获得正确的表达式,但一旦掌握了窍门,就不难了
foundMatch=Regex.IsMatch(subjectString,@”
#匹配满足多个逻辑约束的“word”。
^#锚定至管柱起点。
(?=[^!@#]*$)#它不能有以下任何一项:!@#,和
(?![=])它不能以空格或=,和开头
(?!.*\S$)#它不能以空格结尾,并且
.{1,}#长度>=1(可以匹配特殊的“单词”)
\z#锚定在绳子的末端。
",
RegexOptions.ignorepattern(空格);
“正则表达式逻辑”的这个应用程序经常用于复杂的密码验证。+1用于我几周来看到的第一个正则表达式问题,其中包括以前失败的尝试。换句话说,+1是一个真正的正则表达式问题。