zoukankan      html  css  js  c++  java
  • Java中用正则表达式截取字符串中

    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或一个
    以上来自博主的博客,然后这道题目
    .表示除 之外的任意字符
    *表示匹配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、正则表达式中元字符:
    ".":匹配除去 换行符的任意字符
    "*":匹配前面子表达式任意次
    "?":匹配前面子表达式的0次或1次,如果前面也是元字符,那么它就是非贪婪匹配了(默认是贪婪匹配的)。
    2、B中 ".*?(?=\()"中后面的(?=\()它是(?=assert)的形式,叫做顺序环视,也就是前面.*?匹配到的字符后面必须要紧接着有assrt中声明的值,也就是左括号(其中\都是转义字符),但是匹配的到的串是不包含assrt中声明的内容的。
    3、题中,原串 “北京市(海淀区)(朝阳区)(西城区)”,首先匹配到北京市(前部分),然后北京市后面有左括号( ,这是后面顺序环视部分,但是不包括左括号,这样整个串就匹配完了,截取到的串为“北京市”。
     
  • 相关阅读:
    普通的一个python脚本,hadoop进军的准备
    Python之数据类型讲解
    开始博客的理由
    【微机原理及应用】程序的分类
    【jvm】jvm学习第二篇。jvm运行机制
    【jvm】jvm学习第一篇。初识jvm
    【it公司】it公司简介-项目流程-研发小技巧
    【感悟】20岁的人生不应该停止奋斗。----------------努力努力再努力
    【书籍学习】史上最全的Java进阶书籍推荐
    【职业规划】3年工作经验的程序员应该具备的技能
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11038943.html
Copyright © 2011-2022 走看看