Ruby与正则表达式分裂 – 正则表达式没有做我想要的

我有这个字符串

string = "

para1

para2

para3

"

我想分开para2文本,以便我得到这个

 ["

para1

", "

para3

"]

问题是有时para2可能不会被包装在p标签中(并且p外部和内部可能有可选空格)。 我认为这样做会:

 string.split(/\s*(

)?\s*para2\s*()?\s*/)

但是,我明白了:

 ["

para1

", "

", "

", "

para3

"]

它不是将开始和结束p标记拉入匹配模式 – 它们应该作为拆分的一部分被删除。 默认情况下Ruby的正则表达式是贪婪的,所以我认为它们会被拉入。而且,如果我执行gsub而不是拆分,这似乎得到了证实:

 string.gsub(/\s*(

)?\s*para2\s*()?\s*/, "XXX") => "

para1

XXX

para3

"

他们被拉进来并摆脱了这里,但不是分裂。 任何人的想法?

谢谢,最大

用非捕获组(?:…)替换捕获组(…) (?:…)

 /\s*(?:

)?\s*para2\s*(?:<\/p>)?\s*/