当前位置: 首页 > news >正文

java中正则表达式中的非字符串处理

在java中我们经常遇到这样的情况,

如下:

<img src="image0"></img>ss<img src="image1"></img>pp<img alt="say"></img>

我们想获取img中的信息,但是alt又不是我们需要的,我们需要获得的只是src的内容。也许你会说我提取两次就好了,确实提取两次就可以了。

但是有的时候是不允许提取两次的。。

所以这里我们就用到了非,

我们举一个例子


String str="aaatggcccssaaakkcccaaaxvcccaaavxccc";

我们想提取aaa和ccc之间的内容,但是我们提取的这里面不希望是xx开头的。。应该怎么做呢。

我们都知道,正则中的非是^

很显然,

regex="aaa[^xx]ccc";这样的方法肯定是不行的。。

也许你会想到

regex="aaa[^x][^x]ccc";

但是实际上这种方法也是不行的。。。因为在正则判断的时候,如果发现第一个字母x不符合[^x]的条件,那么就直接是判断false的。


php语言中有?!非字符串 的用法,但是java中貌似没有,至少我暂时还没发现,如果有希望大家告诉我一下。。

对于上面的问题,其实我们可以换个角度去想想,如果不允许xx的形式,其实反过来就是允许

x[^x]|[^x][^x]|[^x]x的形式。所以我们的思路来了。。

例子如下:

String regex="aaa(x[^x]\\w*?|[^x][^x]\\w*?|[^x]x\\w*?)ccc";
        String str="aaatggcccssaaakkcccaaaxvcccaaaxxccc";
        Matcher m = Pattern.compile(regex).matcher(str);
        while(m.find()){
            System.out.println(m.group(1));
        }

显示结果如下:

tgg
kk
xv

结果正确,测试了好几种方法,暂时还没发现错误。。如果大家有更好的方法,欢迎分享。

最后补充一下,这样的方式去提取是很低效的,如果可以,如果不是想偷懒的话,还是分两次提取的方法更合适一些。


相关文章:

  • 小智慧61
  • IOS 开发之 CocoaPods讲解
  • eclipse安装插件checkstyle
  • 制作网站以及发布的流程
  • checkstyle之如何配置
  • c#中datetime类型与SqlServer中datetime格式的区别
  • 在git的Bash下进行复制粘贴
  • 小智慧62
  • SICP 习题 (1.14)解题总结
  • 一个爬电商数据并实现搜索的例子
  • Qt5学习之路(VS下Qt设计师文件的使用)2013-10-13
  • 使用shell关闭占用某一个端口的程序
  • CGlib的动态代理使用示例
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (4)事件处理——(7)简单事件(Simple events)
  • 深入了解以太坊
  • 230. Kth Smallest Element in a BST
  • Consul Config 使用Git做版本控制的实现
  • jquery cookie
  • JS+CSS实现数字滚动
  • mysql常用命令汇总
  • node入门
  • vagrant 添加本地 box 安装 laravel homestead
  • windows下使用nginx调试简介
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 百度小程序遇到的问题
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端面试总结(at, md)
  • 前端之React实战:创建跨平台的项目架构
  • 深入 Nginx 之配置篇
  • 为视图添加丝滑的水波纹
  • 一道面试题引发的“血案”
  • 异常机制详解
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Linux权限管理(week1_day5)--技术流ken
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (五)关系数据库标准语言SQL
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)详解PHP处理密码的几种方式
  • (转)用.Net的File控件上传文件的解决方案
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net访问oracle数据库性能问题
  • .project文件
  • /var/lib/dpkg/lock 锁定问题
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 转载 ] SharePoint 资料
  • [14]内置对象