使用 Ruby 我正在尝试使用正则表达式拆分以下文本
~foo\~\=bar =cheese~monkey
其中 ~ 或 = 表示匹配的开始,除非它用 \ 转义
所以它应该匹配
~foo\~\=bar
然后
=cheese
然后
~monkey
我认为以下内容会起作用,但事实并非如此。
([~=]([^~=]|\\=|\\~)+)(.*)
什么是更好的正则表达式?
编辑更具体地说,上面的正则表达式匹配所有出现的 = 和 ~
编辑工作解决方案。这是我想出的解决问题的方法。我发现 Ruby 1.8 具有前瞻功能,但没有后瞻功能。所以看了一圈之后,我在 comp.lang.ruby 中看到了这篇文章,并用以下内容完成了它:
# Iterates through the answer clauses
def split_apart clauses
reg = Regexp.new('.*?(?:[~=])(?!\\\\)', Regexp::MULTILINE)
# need to use reverse since Ruby 1.8 has look ahead, but not look behind
matches = clauses.reverse.scan(reg).reverse.map {|clause| clause.strip.reverse}
matches.each do |match|
yield match
end
end