Ruby 与正则表达式分离 - 正则表达式没有做我想做的事

标签 ruby regex

我有这个字符串

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/

相关文章:

php - 获取字符串中的 240x670 并删除?

ruby - 在 mongoid 上提取多个和/或嵌套字段

ruby-on-rails - rails : can't run app because "An error occured while installing json (1.7.7)"

Ruby:如何获取时间对象中的子午线?

python - 用指向 URL 的链接替换文本中的 URL

jquery - 使用 jQuery 或 RegEx 获取在样式表中写入的 CSS 值

regex - pig - 使用正则表达式解析字符串

ruby - 自动加载在 Ruby 1.9 中是线程安全的吗?

ruby-on-rails - 部署到 capistrano 时如何调试?

javascript - ES6 RegExps 支持 Iterator 协议(protocol)吗?