方括号中的正则表达式不在其前面或后面

时间:2014-02-04 15:37:20

标签: c# regex

我正在尝试在C#中创建一个正则表达式模式以查找字符串,任何[之前]没有先于或后面跟着“。”...这里是我到目前为止的模式,这让我想到实际问题:它只适用于不在第一行的文本吗?

模式:

([^\.]\[[^\[]*][^\.])

考虑以下“文本”值:

[F] (never matches even if it should)

[F].[1234] (not a match, correct)

[P] (is a match)

如果有人可以帮助我,我会非常感激,因为我不能,因为我的生活,弄清楚为什么不考虑第一行。

谢谢!

2 个答案:

答案 0 :(得分:4)

您编写的正则表达式验证了第一个[必须在其前面有一个不是.的字符。第一个[前面没有任何字符,因此失败。

使用否定断言,您可以说“匹配,如果没有.”。

((?<!\.)\[[^\[]*](?!\.))


NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    (?<!                     look behind to see if there is not:
--------------------------------------------------------------------------------
      \.                       '.'
--------------------------------------------------------------------------------
    )                        end of look-behind
--------------------------------------------------------------------------------
    \[                       '['
--------------------------------------------------------------------------------
    [^\[]*                   any character except: '\[' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
    ]                        ']'
--------------------------------------------------------------------------------
    (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
      \.                       '.'
--------------------------------------------------------------------------------
    )                        end of look-ahead
--------------------------------------------------------------------------------
  )                        end of \1

答案 1 :(得分:0)

你也可以使用这种模式:

((^|[^\.])\[[^\[]*][^\.])

与你的不同之处在于[可能只是该行中的第一个符号。

我还建议您使用http://regex101.com/之类的网站来更好地了解正则表达式的工作原理。