RegEx用于在Sublime中匹配具有多个固定边界的模式

时间:2019-05-04 20:24:25

标签: regex

我试图弄清楚如何创建一个Sublime表达式,当给定的文本子部分(ParticleSystemRenderer :)的变量(m_CastShadows)为1到3时,可以在文件中找到该表达式,但是忽略该变量名(如果位于其他部分(MeshRenderer:)。

每个部分都以“ ---!”开头。

我如何找到以“ ParticleSystemRenderer:”开头并包含m_CastShadow: [1-3]的部分?

在下面的示例文本中,第一个“ ParticleSystemRenderer:”块将被跳过,因为“ m_CastShadows”为0,而第二个将被匹配,因为“ m_CastShadows”为2。

我的问题是:具有Sublime返回文件的表达式是什么,其中仅文件的任何“ ParticleSystemRenderer:”部分中的“ m_CastShadows”变量不为零,而忽略了在其他变量中找到的任何其他“ m_CastShadows”变量部分?

我尝试使用以下表达式来返回所有包含使用表达式m_CastShadows: [1-3]包含此字符串的文件,但是它将返回任何“ m_CastShadows”不为零(不仅是“ ParticleSystemRenderer:”部分为零)的文件。 / p>

除此之外,尽管我对RegEx非常迷失。我确实尝试在regexr.com上构建一个表达式,但无法为此找到有效的表达式。

示例文字:

--- !u!1 &75000372733
MeshRenderer:
  m_ObjectHideFlags: 1
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1000010438045922}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_DynamicOccludee: 1
  m_MotionVectors: 1
--- !u!23 &23000010372327926
ParticleSystemRenderer:
  m_Enabled: 1
  m_CastShadows: 0
  m_ReceiveShadows: 0
  m_DynamicOccludee: 1
  m_MotionVectors: 1
--- !u!2 &23006841372327911
SomeOtherSection:
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 0
--- !u!23 &97320010372327543
ParticleSystemRenderer:
  m_Enabled: 1
  m_CastShadows: 2
  m_ReceiveShadows: 0
  m_DynamicOccludee: 1
  m_MotionVectors: 1
--- !u!2 &23006841372327911
SomeOtherSection2:
  m_Enabled: 1
  m_CastShadows: 3
  m_ReceiveShadows: 0

在上面的示例文本中,如果仅“ ParticleSystemRenderer:”部分的“ m_CastShadows”大于0,我希望Sublime返回该文件。无论其值如何,它都会忽略“ MeshRenderer:”中的那个。 / p>

如果将“ ParticleSystemRenderer:”部分的“ m_CastShadows”更改为零(同样,无论“ MeshRenderer:”部分中的那个设置为-还是该菜单的任何其他部分,也不会返回文件)碰巧使用相同变量名的文件。

还值得注意的是,该文件可能包含多个“ ParticleSystemRenderer:”部分。只要那些“ ParticleSystemRenderer:”部分之一中的“ m_CastShadows”变量之一大于零,我就希望它返回文件。

在此先感谢RegEx向导提供指导!

2 个答案:

答案 0 :(得分:3)

这是针对您的特定示例

(?:\r?\n|^)ParticleSystemRenderer:.*\r?\n(?:[ ]{2,}.*\r?\n)*?[ ]{2,}m_CastShadows:[ ]*([1-9]\d*)

https://regex101.com/r/GVSWuZ/1

如果您的引擎支持多行模式,请使用

(?m)^ParticleSystemRenderer:.*\s*(?:^[ ]{2,}.*\s*)*?[ ]{2,}m_CastShadows:[ ]*([1-9]\d*)  

https://regex101.com/r/wLmlAL/1

答案 1 :(得分:1)

This expression可能会帮助您设计一个:

(ParticleSystemRenderer:[\s\S]*)(m_CastShadows: [1-3])

enter image description here

此图显示了它的工作方式:

enter image description here

  • 您可以根据需要添加其他边界。