避免与固定位置的给定文本匹配

时间:2021-03-10 21:36:31

标签: c# regex

我有两种字符串(something 可以是任何类型的文本):

  • <<something>>
  • <<CODE:something>>

用于查找两者的正则表达式的模式是:

  • <<(.*?)>>
  • <<CODE:(.*?)>>

如您所见,存在第一个模式也可以找到第二个字符串的问题。 由于两者都以 << 开头且第一个模式是 (.*?),因此可能会出现不需要的匹配。

如何防止在 CODE: 内找到带有 << >> 的字符串?

1 个答案:

答案 0 :(得分:1)

使用

<<(?!CODE:)(.*?)>>

proof

说明

--------------------------------------------------------------------------------
  <<                       '<<'
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    CODE:                    'CODE:'
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    .*?                      any character except \n (0 or more times
                             (matching the least amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  >>                       '>>'
相关问题