正则表达式---获取英文双引号里面的内容
来源:互联网 发布:网络中了500万怎么领奖 编辑:程序博客网 时间:2024/05/02 05:56
有时我们会很烦恼,怎样获取英文 " " 里面的内容,因为英文的前后引号一样,会造成很多麻烦:
例如:The name "McDon ald's" is said "markudonarudo" in Japanese
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("\"(.+)\"");
//由于引号内可能存在空格以及其他除了"各种各样的字符,我可以使用排除型字符组[^], 但我首先试一下 .+
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
结果为:
1----"McDon ald's" is said "markudonarudo"
顺着这条思路往下走,我发现我只是多匹配了一些字符,因为 .+ 可以匹配至少一个字符,由于正则的贪婪特性,它从M开始将后面的所有的字符
到Japanese的都全部匹配上了,但是由于
\"(.+)\"
最后还有个 " 结尾所以无法匹配,.+ 会让出一个字符让 " 来匹配,如果匹配不上继续让出字符,直到匹配成功或者无法让出宣告匹配失败
那么好吧,正则太贪婪了,正好有一种懒惰匹配,如示例中的:
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("\"(.+?)\"");
//只要在+后面加上一个简单的?就可以的到正确的结果
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
.+?的意思是在匹配的前提下,尽可能少的匹配,怎么样理解尽可能少,如此例中,.+?本来可以像上一个例子中,匹配一大串,但是由于后面有个?总是催促:“你匹配好了没有,该我了吧?”,所以,.+心理很烦,变得很懒了,在第一“收尾的时候就停下来了,这样就得到了正确的结果。
1----使用 .:"McDon ald's"
2----使用 .:"markudonarudo"
现在看看这个懒惰的正则表达式:?放在括号外边行不行,当然不可以,那样?就成了最好匹配一次,即使不匹配也可以的元字符,所以懒惰的用法应该是紧跟着贪婪元字符的后面。
还有一点要注意的是使用环视的时候,由于环视不占用字符,只是占用位置
这样会得到三个答案:
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("(?<=\")(.+?)(?=\")");
//使用的是环视
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
(?<=")代表这个位置的左边必须有一个 ” ,既然正则不会占用 “ ,它只需要左边是 ” 右边是什么它不会管,这样我们可以认为它占用了一个什么都不是的缝隙位置,这个缝隙位置只有一个要求就是左边是 ” ,(?=\")的意思是占用两个字符之间的缝隙位置,缝隙位置的右边是“ ,此时由于环视都不会占用字符,而缝隙只是理解,并不存在真正的缝隙,这样匹配结束后的位置只是到达s 和 ”之间的位置,下一次匹配的时候就会把 “ 也匹配上
1----使用 .:McDon ald's
2----使用 .: is said
3----使用 .:markudonarudo
所以使用环视有点不妥!
//还可以使用以下方式的排除环视
Pattern p = Pattern.compile("\"((?!\").)+\"");
//(?!\").的意思是一个位置的右边不能是" ,然后后面接了一个. ,就是说.表示的其他字符都行,就是不能是"
例如:The name "McDon ald's" is said "markudonarudo" in Japanese
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("\"(.+)\"");
//由于引号内可能存在空格以及其他除了"各种各样的字符,我可以使用排除型字符组[^], 但我首先试一下 .+
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
结果为:
1----"McDon ald's" is said "markudonarudo"
顺着这条思路往下走,我发现我只是多匹配了一些字符,因为 .+ 可以匹配至少一个字符,由于正则的贪婪特性,它从M开始将后面的所有的字符
到Japanese的都全部匹配上了,但是由于
\"(.+)\"
最后还有个 " 结尾所以无法匹配,.+ 会让出一个字符让 " 来匹配,如果匹配不上继续让出字符,直到匹配成功或者无法让出宣告匹配失败
那么好吧,正则太贪婪了,正好有一种懒惰匹配,如示例中的:
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("\"(.+?)\"");
//只要在+后面加上一个简单的?就可以的到正确的结果
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
.+?的意思是在匹配的前提下,尽可能少的匹配,怎么样理解尽可能少,如此例中,.+?本来可以像上一个例子中,匹配一大串,但是由于后面有个?总是催促:“你匹配好了没有,该我了吧?”,所以,.+心理很烦,变得很懒了,在第一“收尾的时候就停下来了,这样就得到了正确的结果。
1----使用 .:"McDon ald's"
2----使用 .:"markudonarudo"
现在看看这个懒惰的正则表达式:?放在括号外边行不行,当然不可以,那样?就成了最好匹配一次,即使不匹配也可以的元字符,所以懒惰的用法应该是紧跟着贪婪元字符的后面。
还有一点要注意的是使用环视的时候,由于环视不占用字符,只是占用位置
这样会得到三个答案:
String input = "The name \"McDon ald's\" is said \"markudonarudo\" in Japanese";
Pattern p = Pattern.compile("(?<=\")(.+?)(?=\")");
//使用的是环视
Matcher m = p.matcher(input);
int count = 0;
while(m.find()){
count ++;
System.out.println(count + "----使用 .:" + m.group(0));
}
(?<=")代表这个位置的左边必须有一个 ” ,既然正则不会占用 “ ,它只需要左边是 ” 右边是什么它不会管,这样我们可以认为它占用了一个什么都不是的缝隙位置,这个缝隙位置只有一个要求就是左边是 ” ,(?=\")的意思是占用两个字符之间的缝隙位置,缝隙位置的右边是“ ,此时由于环视都不会占用字符,而缝隙只是理解,并不存在真正的缝隙,这样匹配结束后的位置只是到达s 和 ”之间的位置,下一次匹配的时候就会把 “ 也匹配上
1----使用 .:McDon ald's
2----使用 .: is said
3----使用 .:markudonarudo
所以使用环视有点不妥!
//还可以使用以下方式的排除环视
Pattern p = Pattern.compile("\"((?!\").)+\"");
//(?!\").的意思是一个位置的右边不能是" ,然后后面接了一个. ,就是说.表示的其他字符都行,就是不能是"
0 0
- 正则表达式---获取英文双引号里面的内容
- 正则表达式获取中括号里面的内容
- 正则表达式匹配双引号中间的内容(双引号除外)
- 用正则表达式获取网页里面的内容/java面试题
- 如何ASP代码中编写正则表达式来获取其中双引号间内容
- vim 正则表达式获取双引号中的字符
- C# - 正则表达式:匹配引号里面的内容
- 正则表达式匹配大括号里面的内容
- 正则表达式获取字符串内容
- 正则表达式中双引号、单引号的表示
- java 正则表达式 获取双引号中到字符串
- JavaScript里面的正则表达式
- Python里面的正则表达式:
- php获取超链接文本内容的几款正则表达式
- JS正则表达式获取分组内容的方法详解
- java如何用正则表达式获取匹配的内容
- C# 正则表达式匹配多层嵌套的括号里面的内容 百度api逆地址解析
- JS正则表达式获取分组内容实例
- JPA 持久化规范----简单应用
- JavaScript打开窗口函数(Window.Open)使用详解
- TIME_WAIT
- 基于SQL Server 2008事物复制的多到一同步
- 正则表达式匹配算法
- 正则表达式---获取英文双引号里面的内容
- 国外 2D 引擎相关站点收集
- 网站建设优化如何做好内部页面的优化
- 解决错误:/gen already exists but is not a source folder. Convert to a source folder or rename it
- 开始iOS 7中自动布局教程(一)
- enable_share_from_this功能介绍
- JavaScript权威指南学习笔记——JavaScript概述
- 字符串加密处理
- 黑马程序员--包与包之间的调用