0

我正在尝试构建一个正则表达式,但我发现对于这种特殊情况很难做到这一点。仅当我尝试解析的字符串不包含特定子字符串时,我才想返回匹配项。例如(搜索不区分大小写的子字符串“test”):

"Line one
Line two
Line test three" - Return false.

"Line test one" - Return false.

"Tfest" - Return true.

"Tfest
Tdhf
Line three" - Return true.

我已经能够使用单行字符串执行此操作,^((?!message 1).)*$但我不确定多行字符串。

PS:我不想就使用字符串操作 VS 正则表达式展开辩论。性能是一个问题。问题的约束是解决方案必须使用正则表达式。

4

2 回答 2

1

问题是点与换行符不匹配。

正如 Jerry 所建议的那样,您可以使用单行模式(或 dotall 模式)来允许点匹配换行符。

另一种方法是避免使用点,例如单词“test”:

^(?>[^t]+|\Bt|t(?!est\b))*$

请注意,这种方式的性能更高,因为仅在单词边界前面有“t”时才测试先行。(与每个字符对比^((?!\btest\b).)*$

于 2013-08-28T15:49:35.683 回答
1

您可以使用该标志RegexOptions.SingleLine使您在正则表达式中使用的点匹配换行符:

new Regex(@"^((?!message 1).)*$", RegexOptions.SingleLine | RegexOptions.IgnoreCase);
于 2013-08-28T16:13:45.597 回答