java中正则表达式中的非字符串处理
来源:互联网 发布:足球运动员数据库 编辑:程序博客网 时间:2024/06/06 04:17
在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
结果正确,测试了好几种方法,暂时还没发现错误。。如果大家有更好的方法,欢迎分享。
最后补充一下,这样的方式去提取是很低效的,如果可以,如果不是想偷懒的话,还是分两次提取的方法更合适一些。
- java中正则表达式中的非字符串处理
- Java正则表达式非贪婪提取字符串中的每个数字
- 字符串过滤,字符串替换(正则表达式中)去掉字符串中的非中文
- java中正则表达式替换字符串中的中括号
- 正则表达式在字符串处理中的应用
- 正则表达式在字符串处理中的应用
- 字符串处理:ABAP中的正则表达式
- JAVA环境使用正则表达式处理字符串
- JAVA环境使用正则表达式处理字符串
- Java正则表达式及字符串处理详解
- 正则表达式处理字符串
- 正则表达式处理字符串
- 正则表达式以及Java中的一个正则表达式处理库
- java正则表达式筛选字符串中的ip
- 在字符串处理中正则表达式中特殊字符处理
- ios开发中使用正则表达式识别处理字符串中的URL
- 字符串中的正则表达式
- Java中使用正则表达式校验字符串
- 【机器学习-斯坦福】学习笔记4 - 牛顿方法
- 2014 百度前端一面
- Ubuntu 联网后自动运行程序 监测网络连接
- svm理论与实验之5: 线性分类器的求解
- OMF
- java中正则表达式中的非字符串处理
- 我的第一篇文章
- RGB颜色表
- 大连理工大学CSDN俱乐部新学期招新工作圆满完成
- hdu3727Jewel(划分树+二分)
- Java程序优化的一些最佳实践
- CTime 转 时间戳
- vs2008 外部调用ActiveX控件接口方法
- paip.c++ lua 调用attilax总结.