我有一个字符串要解析。首先我必须检查字符串是否包含特殊模式:
- 我想知道是否有以“$(”开头的子串, 并以“)”结尾,
- 在那些开始和结束的特殊字符串之间,不应该有 任何空白区域,
- 它不应该包含“$”字符。
我在 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 .您需要在正则表达式中组合否定类,以匹配任何不是空格或 $ 的字符。
