Skip to main content
 首页 » 编程设计

c#之正则表达式 [\S 而不是 [[\S

2024年02月23日32yjmyzz

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

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

我有 @"\[[\S^\[]" 但它不是很有效。

编辑:澄清一点,我正在研究一个 wiki 解析器(所以它是基于字符串的——我原以为这只是正则表达式的作用)。我的链接以 [ 开头,但我想用双 [[ 来转义 [。 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]"