过滤html tag外内容的正则
By admin
上礼拜上班最后俩钟头写的一个,大概是我用上过最复杂的正则了
rails里用的,需要把所有html标签外的的数字与英文都替换成_…_包裹的内容。
prawn里替换字体用的,领导希望所有英文用times new roman字体显示。其他中文用宋体,prawn里没找着这种混合设置,只能想到用正则筛。
args[0].gsub!(/(?<!‘<’)([a-z0-9]+)(?![^>]*?[>])/i, ‘\1‘) if args[0].is_a? String
str.gsub!(/(?<=<([^>])>).*?([a-z0-9]+).*?(?=</\1>)/i, ‘\2‘)
如果在零宽度正回顾后发断言中使用了数量匹配,就报错。比如
str.gsub!(/(?<=<([^>]+)>).*?([a-z0-9]+).*?(?=</\1>)/i, ‘\2‘)
但是匹配固定数量没问题,比如
str.gsub!(/(?<=<([^>]{1})>).*?([a-z0-9]+).*?(?=</\1>)/i, ‘\2‘)
网上都这么写没错,可能ruby的有些特殊,还是bug?
http://stackoverflow.com/questions/3479131/problem-with-quantifiers-and-look-behind
如是说,说不止ruby一个不支持在反向回顾中支持数量匹配的。