我有这个字符串
string = "<p>para1</p><p>para2</p><p>para3</p>"
我想拆分 para2 文本,这样我就明白了
["<p>para1</p>", "<p>para3</p>"]
要注意的是,有时 para2 可能没有包含在 p 标签中(并且 p 的外部和内部可能有可选空格)。我以为这样就可以了:
string.split(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/)
但是,我明白了:
["<p>para1</p>", "<p>", "</p>", "<p>para3</p>"]
它不会将开始和结束 p 标签拉入匹配模式 - 它们应该作为拆分的一部分被消除。 Ruby 的正则表达式默认是贪婪的,所以我认为它们会被拉进来。而且,如果我执行 gsub 而不是拆分,这似乎得到证实:
string.gsub(/\s*(<p>)?\s*para2\s*(<\/p>)?\s*/, "XXX")
=> "<p>para1</p>XXX<p>para3</p>"
他们正在被拉进来并在这里摆脱,但不是在 split 上。有什么想法吗?
谢谢,马克斯
最佳答案
将您的捕获组 (...)
替换为非捕获组 (?:...)
:
/\s*(?:<p>)?\s*para2\s*(?:<\/p>)?\s*/
关于Ruby 与正则表达式分离 - 正则表达式没有做我想做的事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2164211/