【问题标题】:How to match a String in a line having immediate special character?如何匹配具有直接特殊字符的行中的字符串?
【发布时间】:2017-02-03 17:47:22
【问题描述】:

我已经给出了一个像下面这样的条件,它不能匹配像from table1;insert into table1(col1,col2 ..)这样的行

if(Arrays.asList(line.split("\"")).contains("table1")) || 
        Arrays.asList(line.split(" ")).contains("table1"))
    System.out.println(line); 

我需要遵循什么逻辑?

【问题讨论】:

  • 这取决于你想要得到什么结果。
  • 我想找到确切的字符串 \btable1\b 并排除“table1id”类型的字符串。我还想捕捉我在描述中提到的那些行,例如 from table1;insert into table1(col1,col2 ..)
  • 所以你知道\b是什么,这意味着你应该知道这可以通过简单的正则表达式来完成,而不是拆分。您为什么不尝试匹配您提供的正则表达式 (\btable1\b)?

标签: java regex string contains


【解决方案1】:

使用正则表达式并将需要拆分的所有特殊字符放入该表达式中。

if(Arrays.asList(line.split("[\",\s\.]").contains("table1"))

【讨论】:

    【解决方案2】:

    如下使用正则表达式匹配

    if(Arrays.asList(line.split("[\", .]").contains("table1"))
    

    请注意,您可以在方括号中放置要分割行的任何字符。

    【讨论】:

      【解决方案3】:

      你可以使用正则表达式:

          Pattern pat = Pattern.compile("(?<!\\p{L})table1(?!\\p{L})");
          if (pat.matcher(line).find())
          {
            System.out.println(line);
          }
      

      【讨论】:

        【解决方案4】:

        如果我正确理解您的问题,您可以在不使用拆分的情况下实现它:

         String stringPattern = ".*table1.*";
         Pattern pattern = Pattern.compile(stringPattern);
         Matcher matcher = pattern.matcher(line);
         if (matcher.matches())
          System.out.println(line); 
        

        【讨论】:

          【解决方案5】:

          您可以使用带有负前瞻和负后瞻的正则表达式:

          String input = "from table1;";
          Pattern p = Pattern.compile("(?<![a-zA-Z0-9_])table1(?![a-zA-Z0-9_])");
          Matcher matcher = p.matcher(input);
          
          if (matcher.find()) 
              System.out.println(input);
          

          这将匹配任何前面或后面没有任何字母、数字或 _ 符号的 "table1" 出现。

          【讨论】:

            【解决方案6】:

            试试这个:

            if (Arrays.asList(list.split("[^a-zA-Z0-9_]")).contains("table1")) {
                    System.out.println(list);
            }
            

            或者正如 RealSkeptic 建议的那样使用正则表达式匹配:

            if (list.matches(".*\\btable1\\b.*")) {
                    System.out.println(list);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-12
              • 1970-01-01
              • 1970-01-01
              • 2020-12-25
              • 1970-01-01
              • 2014-05-09
              • 1970-01-01
              相关资源
              最近更新 更多