Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。正则表达式为()
  • A   ".*?(?=\\()"
  • B   ".*?(?=\()"
  • C  ".*(?=\\()"
  • D  ".*(?=\()"
http://www.cnblogs.com/xudong-bupt/p/3586889.html

1.什么是正则表达式的贪婪与非贪婪匹配

如:String str="abcaxc";

Patter p="ab*c";


贪婪匹配:
正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

2.编程中如何区分两种模式


默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

量词:{m,n}:m到n个

*:任意多个

+:一个到多个

?:0或一个
以上来自博主的博客,然后这道题目
.表示除\n之外的任意字符

*表示匹配0-无穷

+表示匹配1-无穷

(?=Expression) 顺序环视,(?=\\()就是匹配正括号
懒惰模式正则:

src=".*?
(?=\\())
"
结果:北京市
因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。
 
 
A ".*?(?=\\()"

B ".*?(?=\()"
C ".*(?=\\()"
D ".*(?=\()"

前面的.*?是非贪婪匹配的意思, 表示找到最小的就可以了

(?=Expression) 顺序环视,(?=\\()就是匹配正括号

String text = "北京市(海淀区)(朝阳区)(西城区)";

Pattern pattern = Pattern.compile(".*?(?=\\()"
);
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println(matcher.group(0));
}

 
解析

选A,
知识点是正则表达式中的贪婪匹配。

1、正则表达式中元字符:

".":匹配除去\n换行符的任意字符

"*":匹配前面子表达式任意次
"?":匹配前面子表达式的0次或1次,如果前面也是元字符,那么它就是非贪婪匹配了(默认是贪婪匹配的)。
2、B中 ".*?(?=\\()"中后面的(?=\\()它是(?=assert)的形式,叫做顺序环视,也就是前面.*?匹配到的字符后面必须要紧接着有assrt中声明的值,也就是左括号(其中\\都是转义字符),但是匹配的到的串是不包含assrt中声明的内容的。
3、题中,原串 “北京市(海淀区)(朝阳区)(西城区)”,首先匹配到北京市(前部分),然后北京市后面有左括号( ,这是后面顺序环视部分,但是不包括左括号,这样整个串就匹配完了,截取到的串为“北京市”。
 

Java中用正则表达式截取字符串中的更多相关文章

  1. Java之正则表达式来判断字符串中是否包含字母

    /** * 使用正则表达式来判断字符串中是否包含字母 * @param str 待检验的字符串 * @return 返回是否包含 * true: 包含字母 ;false 不包含字母 */ public ...

  2. 用C#通过正则表达式截取字符串中符合条件的子字符串

    仅仅作为简单的记录,不多说直接上代码(仅测试使用): private void Test() { Regex ConnoteA = new Regex("^[a-zA-Z]\\d{8}$&q ...

  3. 怎么用JS截取字符串中第一个和第二个字母间的部分?

    一.JS中用正则判断字符串是否有匹配正则的字符串部分,格式如下: /[a-zA-Z](.*?)[a-zA-Z]/.test('1a123d45678901a2') “.test”前面的部分是正则表达式 ...

  4. java 正则匹配空格字符串 正则表达式截取字符串

    java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...

  5. java截取字符串中的最后几个字符

    Java中的String类提供了一个substring(int from, int to)方法用于截取字符串中位置为from到to-1位置的字符. 因为字符串的字符位置是从0开始的,而substrin ...

  6. Java中用正则表达式找出数字

    Java中用正则表达式找出数字 1.题目    String str = "fjd789klsd908434jk#$$%%^38488545",从中找出78990843438488 ...

  7. JS正则表达式获取字符串中特定字符

    JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取. 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test  实 ...

  8. [原]Java面试题-将字符串中数字提取出来排序后输出

    [Title][原]Java面试题-将字符串中数字提取出来排序后输出 [Date]2013-09-15 [Abstract]很简单的面试题,要求现场在纸上写出来. [Keywords]面试.Java. ...

  9. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

随机推荐

  1. vim中代码按照行对齐。

    在vim下, 用命令v, 然后移动光标,选种你的文本, 然后按下=键, 看看效果如何吧.

  2. 微信小程序 报错 “对应的服务器无效。控制台输入 showRequestInfo()可以获取更详细信息”

    之前做的项目突然无法读出数据了,一测试发现报这个错误==>对应的服务器无效.控制台输入 showRequestInfo()可以获取更详细信息,后来发现是SSL证书到期了.重新申请了一个证书,免费 ...

  3. RabbitMQ入门教程(十一):消息属性Properties

    原文:RabbitMQ入门教程(十一):消息属性Properties 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://b ...

  4. 32、出任爬虫公司CEO(爬取职友网招聘信息)

    职友集,搜索到全国上百家招聘网站的最新职位.   https://www.jobui.com/rank/company/   打开网址后,你会发现:这是职友集网站的地区企业排行榜,里面含有     本 ...

  5. springmvc中的参数接收

    import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ...

  6. 关于JAVA中的synchronized,一段不错的解释...

  7. Hack the box: Bastion

    介绍 目标:10.10.10.134 (Windows) Kali:10.10.16.65 In conclusion, Bastion is not a medium box. But it wou ...

  8. 在window环境下安装symfony2框架注意事项

    首先先放上放上安装的教程:http://www.symfonychina.com/doc/current/setup.html 然后说一下笔者遇到的坑 在运行这条命令的时候,虽然成功下载读取下来了,但 ...

  9. 如何修改wordpress博客默认管理员用户名称

    打开你的WordPress数据库,点击结构后面的SQL,输入下面一段命令执行 UPDATE wp_users SET user_login = '新用户名', user_nicename = '新用户 ...

  10. java知识

    DiskFileUploadhttps://blog.csdn.net/FightingITPanda/article/details/79742631 import java.util.ArrayL ...