我想在Ruby中使用正向超前(?=)
时排除多个项目。
因此,我们可以匹配换行符(\n
,后跟除换行符和block-level elements以外的任何内容,假设我们要匹配em
和strong
,但不匹配{{ 1}}和ul
为例:
li
我目前有(\nJuanito
\n<ul>\n <li>List
\n </li>
\n <em>
\n <strong>\n Fatas!
的{{1}}需要\\n
):
\n
将与所有换行符匹配,如下所示:
\\n(?=[^\\n])
\nJuanito
\n<ul>
\n <li
\n </li>
\n <em>
\n <strong>
但是我只想要:
\n Fatas!
中的{li> \n
\nJuanito
中的{li> \n
\n <em>
中的{li> \n
\n <strong>
中的{li> \n
无法弄清楚如何添加正要提前排除的事物列表以及排除换行符。
也对解决方案感兴趣,而无需使用积极的前瞻性。
谢谢。
答案 0 :(得分:1)
您维护拒收清单,并以负前瞻的方式将它们合并:
rejects = Regexp.union %w[<ul </ul <li </li]
#⇒ /<ul|<\/ul|<li|<\/li/
input.scan(/\n(?!\n|\s*#{rejects})/)
#⇒ ["\n", "\n", "\n", "\n"]