0

我有一个搜索字符串并使用正则表达式来查找不等于它的所有内容。

即像这样

string searchStr = SearchStr;
searchStr = System.Text.RegularExpressions.Regex.Escape(searchStr).
    Replace(@"\*", ".+").
    Replace(@"\?", ".");
//if (searchStr.StartsWith("!"))//(?!hede).)
//    searchStr = "?!" + searchStr.Substring(1);

然后我做 Regex.isMatch 但我无法?!做到不遵循以下模式,有什么想法吗?

4

3 回答 3

1

如果我理解正确,你不能只是追加?!一开始,您需要创建一个否定的前瞻组,并根据您搜索的内容/方式来锚定它。像这样的事情可能会根据你在做什么工作:

searchStr = "^(?!" + searchStr.Substring(1) + "$).*";

不过,否定正则表达式结果可能会更容易:

Regex r = new Regex(..);
Match m = r.Match(someText);
if (m.Success != searchStr.StartsWith("!")) {
  // matches!
} 

当为false时,您希望正则表达式成功(返回true),反之亦然。.StartsWith("!")

于 2013-04-19T13:01:57.763 回答
0

如果要搜索不等于 的单词something,请尝试:

\b(?!something\b)\w+\b

并以编程方式构建它:

String.Format(@"\b(?!{0}\b)\w+\b", Regex.Escape(negativeSearchStr))

解释:

\b\w+\b

是单词的模式

(?!something) 

是单词不以 开头的负前瞻something。最后:

(?!something\b)

是单词不等于 的负前瞻something

于 2013-04-19T12:59:06.657 回答
0

如果您希望避免不以术语开头的字符串,您将使用lookbehind。Lookbehinds 和lookaheads 应该用括号括起来。现在,如果您不添加括号,您似乎只是在进行文字搜索,因为您正在搜索实际上包含问号和感叹号的字符串。

因此,假设我们有字符串“abc”和“bbc”,我们想要找到不以 a 开头的字符串。您的后向正则表达式将如下所示。

(?<!a)b
于 2013-04-19T13:04:17.263 回答