zoukankan      html  css  js  c++  java
  • Java正则表达式括号内容匹配

    工作中碰到的一些问题与解决方法记录下来以备不时之需

    商品品名规定英文括号正则表达式拆分规则

    .*?  :所有内容

    [1-9] :整数数字1到9

    d :0到9

    d**表示可跟多个数字

    . :小数点

    .? :?表示无小数点或有小数点

    规则是要根据英文括号"()"来把品名拆分多行,难免品名中会包含括号在内,容易混淆匹配规则

     1 String nameInput = "小苹果(1)(1富士康品种)大苹果(2)(2苹果梨)梨(1)";
     2 try{
     3         //String pattern = "(.*?)\(.*?\)";
     4         String pattern = "(.*?)\([1-9]\d*\.?\d*\)";
     5         Pattern r = Pattern.compile(pattern);
     6         Matcher m = r.matcher(nameInput);
     7         while (m.find()) {
     8                 System.out.println(m.group(0));
     9         }
    10 }catch (Exception e){
    11         e.printStackTrace();
    12 }       

    代码中注释的那一行只能匹配英文括号中所有内容,但是“大苹果”这个商品被分成两行了,因为前面英文括号的内容也在匹配范围内。

    输出为:

    小苹果(1)
    (1富士康品种)
    大苹果(2)
    (2苹果梨)梨(1)

    String pattern = "(.*?)\([1-9]\d*\.?\d*\)"

    这行代码可以达到要求,输出为:

    小苹果(1)
    (1富士康品种)大苹果(2)
    (2苹果梨)梨(1)

  • 相关阅读:
    翘边阴影
    原生js实现 拖拽事件
    js实现计算器
    js实现选项卡
    js随机生成座号
    1.记住密码 提示框
    媒体查询
    高性能JavaScript 读书笔记
    調用WEB services
    Dragon Quest VIII 流程攻略(繁体中文完结版)
  • 原文地址:https://www.cnblogs.com/sjzhai/p/13535979.html
Copyright © 2011-2022 走看看