java 多行匹配_正则表达式如何实现多行和跨行匹配?

理解得到的题目:跨行匹配(将整篇文章当作一个长字符串),将cat和dog之间的,最长的,内容提取出来,且其中不包含high和low。

实现代码(一行perl解决):

perl -pe ' s:\n::g; s:(high|low):\n$1:;' txt1.bak | perl -ne 'print $1."\n" if /cat(.*)dog/' >success

结果保存在success文件中。

其他语言实现可能不如perl简单,这里我就不写了........

-----------------------以下是分析思路(其中有错误部分,在最后指出)

经测试跨行匹配不好实现,因为既要考虑贪婪的问题,又要考虑不匹配low和high的问题(开启贪婪就会匹配上low和high,关掉贪婪匹配到的字符串又不是最长的)。

------------------------------楼主表达的意思不太明确,我实现的是将cat和dog之间的,最长的,内容提取出来,且其中不包含high和low

所以用以下思路实现:

首先:去除文本中的所有换行符,然后将cat,high,low前加上\n,

这样就实现找到cat,并且去除了high和low之后的内容(因为要排除high和low,所以直接将其后的所有内容都舍弃{有dog也无法满足},)

然后:将cat开头 dog结尾的内容提取出来(贪婪匹配),

两行命令 :

perl -pe 's:\n::; s:cat:\ncat:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值