Skip to main content
 首页 » 编程设计

c#之正则表达式查找特殊模式

2024年01月26日29luoye11

我有一个字符串要解析。首先我必须检查字符串是否包含特殊模式:

  1. 我想知道是否有以“$(”开头的子串, 并以“)”结尾,
  2. 在那些开始和结束的特殊字符串之间,不应该有 任何空白区域,
  3. 它不应该包含“$”字符。

我在 C# 中有一些正则表达式

 string input = "$(abc)"; 
 string pattern = @"\$\(([^$][^\s]*)\)"; 
 Regex rgx = new Regex(pattern, RegexOptions.IgnoreCase); 
 
 MatchCollection matches = rgx.Matches(input); 
 foreach (var match in matches) 
 { 
     Console.WriteLine("value = " + match); 
 } 

它适用于许多情况,但在 input= $(a$() 时失败,表达式内部为空。我不想在输入为 $()​​ 时匹配。[开始和结束标识符之间没有任何内容]。

我的正则表达式有什么问题?

请您参考如下方法:

注意:[^$] 匹配单个字符,但不匹配 $

如果要匹配 $(),请使用下面的正则表达式

\$\(([^\s$]*)\) 

如果你不想匹配 $(),请使用下面的正则表达式,

\$\(([^\s$]+)\) 
  • * 重复前面的标记零次或多次。
  • + 重复前面的标记一次或多次。

您的正则表达式 \(([^$][^\s]*)\) 是错误的。它不允许 $ 作为 () 中的第一个字符,但它允许它作为第二个或第三个,等等。参见演示 here .您需要在正则表达式中组合否定类,以匹配任何不是空格或 $ 的字符。