简单的问题,这个时间。

我想测试是否有串不包含一个角色,使用一般表达式。我想表达的形式是"[^x]"在哪里 x 是的性格,你不希望出现,但这似乎并不是工作。

例如,

Regex.IsMatch("103","[^0]")

Regex.IsMatch("103&","[^&]")

两return true(我希望false)。

我开始使用 "[^&]" 和思想也许&需要逃脱的作\&,但它似乎没有做出差异。

想法?我假定这是一些小的。

此外,我使用。净,所以记住这一点。

Edit1:

我找到了 , 但它似乎不要回答的问题我有。

Edit2:

我想回应 凯文乔尔's的建议。这些建议将确实以更快的速度,但它们没有实现的灵活性,我需要在这种情况下,所以如果你找到了这个问题通过搜索,一定要看看看如果他们的答复将配合你的需要。在我的情况下,经常达到了通过在一个数据表的验证方法的循环,通过每个行和验证的内容,排在一个具体列匹配RegEx即获得通过。因为我会重新使用这种方法对于几个其他数据表,都是正在进行验证,我想到:

  1. 使用Regex使最大范围的验证,
  2. 总是寻找一种积极的比赛(即而不是使用!Regex.IsMatch(细胞,regexvariable),我想依靠总是能够使用Regex.IsMatch(细胞,regexvariable)由于大多数数据表援引这种方法将使用积极匹配,而不是负面的。

希望这有所帮助。

有帮助吗?

解决方案

你的解决方案中一半是正确的。比赛你看到的是为其他人物。你想说什么就像是"嘿!我不想看到这个角色在整个string"。

在这种情况下你做的事:

Regex.IsMatch("103","^[^0]*$")

其他提示

图案[^0]将符合任何角色,不是零。在您的两个例子,该案将与第一个字符的("1").测试是否整个串包含任何零,该模式应该是"^[^0]*$".这个内容如下:从头开始的串的、匹配的一个任意数字,这不是零,随后立即通过结束。任何串包含一个零将失败。任何串含有没有零会通过。

如果你是在寻找一个单一的字符串中,regex似乎一点的一个矫枉过正。为什么不只是使用。个或.包含?

第一个字符的分析器达到被"1",这是真实对[^0]和也适用于[^&],因此,它将返回的真正在这两个例子。

你把你的否定在错误的地方。 [^x] 将符合任何东西,是不是x。如果x是在串串仍然相匹配的表达,如果有任何其他人物。而是你想要的比赛真的,如果x是存在的,然后否定的结果在功能:

Not Regex.IsMatch("103", "0")

Not Regex.IsMatch("103&", "&")

不是这些简单的实例,在正常串。个()或串。包含()将是一个更好的选择。

我碰到这个问题,在寻找同样的事情,但为JavaScript。表述上没有工作,在我的情况,但我遇到了下面的表达,这没有。(只在情况下,任何人在寻找一个JavaScript解决方案结束了在这里了。)

^((?!0).)*$

这种结构被称为 Negative Lookahead

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top