正则表达式 [S 但不是 [[S.

本文关键字:正则表达式 | 更新日期: 2023-09-27 17:56:44

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

Aka:  This is ok:  [s
      This should be skipped:  [[s

我有@"'[['S^'[]",但它不太有效。

编辑:澄清一点,我正在开发一个 wiki 解析器(所以它是基于字符串的 - 我以为这只是正则表达式的工作)。 我的链接以 [ 开头,但我想用双 [[. 维基已经工作了,但我正在创建一个(希望)更容易扩展的修订版本。

下面是处理程序调用代码:

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 并且前一个字符的最后一个字符是 [. 只是对我复杂的代码提出一个提示,但至少它被发布出来查看。

正则表达式 [S 但不是 [[S.

可以使用负面的回溯:

@"(?<!'[)'[[^['s]"

(哇,看起来很险恶,嗯?...)

编辑:一个不需要回头看的潜在替代方案:

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

我认为问题是 ^ 必须位于组的开头才能表示否定。 为什么不像这样指示负组空格和"[":

@"'[[^'s'[]"

我在这里错过了什么,还是[^[]'[[^'s[]可以正常工作?