c# - 方括号中的正则表达式前面或后面没有

标签 c# regex

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

图案:

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

考虑以下“文本”值:

[F] (never matches even if it should)

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

[P] (is a match)

如果有人能帮我解决这个问题,我将不胜感激,因为我这辈子都无法弄清楚为什么不考虑第一行。

谢谢!

最佳答案

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

对于否定断言,您可以说“如果没有 . 则匹配”。

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


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

关于c# - 方括号中的正则表达式前面或后面没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21556696/

相关文章:

c# - 什么时候应该使用 public、private 或 [SerializeField]?统一 C#

c# - Roslyn 脚本 - 没有 "System"的脚本

regex - csv格式是正规文法还是上下文无关文法?

用于匹配数组中数字的 JavaScript 正则表达式

javascript - 如何通过JavaScript正则表达式匹配不同语言的单词?

c# - 自定义画笔 - 我想要两个渐变将它们链接在一起

c# - 在 C# 中使用带有数字节点的 JSON.decode razor webhelper?

c# - 如何使用 .NET 和 Dapper.NET 执行此 sql 语句?

javascript - ES5 Regex 测试以任意顺序查找一组字符

c++ - 由于链接错误,我无法构建 boost_regex 代码