我正在尝试获得单个括号后跟非空格的匹配,但不是双括号和非空格。
Aka: This is ok: [s
This should be skipped: [[s
我有@"\[[\S^\[]"
,但效果不佳。
编辑:为了澄清一点,我正在开发一个wiki解析器(因此它基于字符串 - 我以为这只是正则表达式的工作原理)。我的链接以[,但我想逃脱[带双[[。维基已经有效,但我正在创建一个(希望)更容易扩展的修订版本。
这是Handler调用代码:
foreach (Rule rule in rules)
{
if (position + rule.Length > text.Length)
break;
if ((rule.PreCondition & condition) == rule.PreCondition)
{
if (substring.Length < rule.Length)
substring = text.Substring(position, rule.Length);
if (rule.Pattern.IsMatch(substring))
{
string previous = text.Substring(0, position);
sb.Append(previous);
text = text.Remove(0, position);
position = 0;
text = rule.Handler(new HandlerParameter(text, condition, previous));
}
}
}
因此,BracketHandler使用该模式来确定我们是否处于支架位置。我的原始模式是\[\S
,但是这对[[s,如果它正在检查[s和前一个字符的最后一个字符是[。]只是提醒我复杂的代码,但至少会发布以查看。
答案 0 :(得分:4)
可以使用负面的背后隐藏:
@"(?<!\[)\[[^[\s]"
(哇,看起来很邪恶,呃?......)
编辑:一种不需要后视的潜在替代方案:
@"(^|[^[])\[[^[\s]"
答案 1 :(得分:0)
我认为问题在于^必须位于组的开头以表示否定。为什么不指出负空间组和'['像这样:
@"\[[^\s\[]"
答案 2 :(得分:0)
我在这里遗漏了什么,或者[^[]\[[^\s[]
会毫无问题地工作吗?