[英]How do I get the ?! regex operator to work properly?
我有一個搜索字符串,並使用正則表達式查找與它不相等的所有內容。
即像這樣
string searchStr = SearchStr;
searchStr = System.Text.RegularExpressions.Regex.Escape(searchStr).
Replace(@"\*", ".+").
Replace(@"\?", ".");
//if (searchStr.StartsWith("!"))//(?!hede).)
// searchStr = "?!" + searchStr.Substring(1);
然后我執行Regex.isMatch但無法獲取?!
做一個不遵循以下模式的想法?
如果我對您的理解正確,就不能追加?! 首先,您需要建立一個否定的前瞻性小組,並根據要搜索的內容/方式進行錨定。 根據您的操作,類似這樣的方法可能會起作用:
searchStr = "^(?!" + searchStr.Substring(1) + "$).*";
否定正則表達式結果可能會更容易:
Regex r = new Regex(..);
Match m = r.Match(someText);
if (m.Success != searchStr.StartsWith("!")) {
// matches!
}
您希望當.StartsWith("!")
為false時正則表達式成功(返回true ),反之亦然。
如果要搜索不等於something
單詞,請嘗試:
\b(?!something\b)\w+\b
並以編程方式構建它:
String.Format(@"\b(?!{0}\b)\w+\b", Regex.Escape(negativeSearchStr))
說明:
\b\w+\b
是單詞的模式
(?!something)
否定性表示詞不是以something
開頭的。 最后:
(?!something\b)
否定性表示詞不等於something
。
如果您要避免使用不以術語開頭的字符串,則將使用后向。 回顧和回顧應該用括號括起來。 現在,如果您不添加括號,似乎您只是在進行文字搜索,例如,您正在搜索的字符串中實際上帶有問號和感嘆號。
假設我們有字符串“ abc”和“ bbc”,並且我們想找到不以a開頭的字符串。 您在正則表達式后面的外觀將如下所示。
(?<!a)b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.