为什么自由间隔模式会阻止工作中的负面观察?

时间:2015-10-30 00:40:42

标签: ruby regex

考虑以下Ruby代码:

/(?<!big )dog/.match('I have a big dog.')        # => nil

现在,我将启用自由间隔模式:

/(?x)(?<!big )dog/.match('I have a big dog.')        # => #<MatchData "dog">

为什么会发生这种情况,如何启用自由间距模式而不会破坏我的负面观察?

1 个答案:

答案 0 :(得分:3)

/(?x)(?<!big )dog/.match('I have a big dog.')
#           ^

请注意,big后面有一个空格。由于它是扩展模式,因此忽略空格。

您有some options

  • 使用\s\p{Space}等模式。
  • 使用转义的空格,例如\,即前面带有空格的空格 反斜杠。
  • 使用[ ]等字符类。

例如:

/(?x)(?<!big\s)dog/.match('I have a big dog.')
# => nil