正则表达式[\ S但不是[[\ S?

时间:2011-05-15 17:52:16

标签: c# regex

我正在尝试获得单个括号后跟非空格的匹配,但不是双括号和非空格。

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和前一个字符的最后一个字符是[。]只是提醒我复杂的代码,但至少会发布以查看。

3 个答案:

答案 0 :(得分:4)

可以使用负面的背后隐藏:

@"(?<!\[)\[[^[\s]"
(哇,看起来很邪恶,呃?......)

编辑:一种不需要后视的潜在替代方案:

@"(^|[^[])\[[^[\s]"

答案 1 :(得分:0)

我认为问题在于^必须位于组的开头以表示否定。为什么不指出负空间组和'['像这样:

@"\[[^\s\[]"

答案 2 :(得分:0)

我在这里遗漏了什么,或者[^[]\[[^\s[]会毫无问题地工作吗?