Шаблон регулярного выражения в Java, соответствующий одной букве вместо полного слова. - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в Java и пытался написать какую-то строку кода, где требуется что-то, что паттерн регулярных выражений будет сохранен в файле, прочитать содержимое из файла и сохранить его список массивов, затем сравнить с некоторой строковой переменной и найти совпадение , Но в этом процессе, когда я пытаюсь сделать его соответствие одной буквы вместо всего слова. ниже код.

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.regex.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegexMatches { 

   public void findfile( String path ){
      File f = new File(path);
      if(f.exists() && !f.isDirectory()) { 
        System.out.println("file found.....!!!!");
        if(f.length() == 0 ){
	         System.out.println("file is empty......!!!!");

}}
      else {
         System.out.println("file missing");
      }

}

    public void readfilecontent(String path, String sql){
     try{Scanner s = new Scanner(new File(path));
      ArrayList<String> list = new ArrayList<String>();
      while (s.hasNextLine()){
      list.add(s.nextLine());
      }
        s.close();
        System.out.println(list);
        
        Pattern p = Pattern.compile(list.toString(),Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(sql);
        if (m.find()){
          System.out.println("match found");
          System.out.println(m.group());
      }  
        else {System.out.println("match not found"); }

      }
        catch (FileNotFoundException ex){}
       
    }

public static void main( String args[] ) {

 String path = "/code/sql.pattern";
 String sql = "select * from  schema.test";
  RegexMatches regex = new RegexMatches();
  regex.findfile(path);
  regex.readfilecontent(path,sql);
  

}

sql.pattern содержит

\\buser\\b \\border\\b

Я ожидаю, что он не должен совпадать с чем-либо, и напечатает сообщение о том, что совпадение не найдено, вместо этого в нем говорится, что совпадение найдено, и m.group () печатает букву s , так как вывод может помочь кому-либо.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

Проблема здесь, кажется, двойная косая черта.

Я бы не рекомендовал указывать list.toString() в Pattern.compile методе, поскольку он также вставляет ' [', ', ' и '] 'символ, который может испортить ваше регулярное выражение, вместо этого вы можете обратиться ниже код:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

  public void findfile(String path) {
    File f = new File(path);
    if (f.exists() && !f.isDirectory()) {
      System.out.println("file found.....!!!!");
      if (f.length() == 0) {
        System.out.println("file is empty......!!!!");

      }
    } else {
      System.out.println("file missing");
    }

  }

  public void readfilecontent(String path, String sql) {
    try {
      Scanner s = new Scanner(new File(path));
      ArrayList<String> list = new ArrayList<String>();
      while (s.hasNextLine()) {
        list.add(s.nextLine());
      }
      s.close();
      System.out.println(list);

      list.stream().forEach(regex -> {
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(sql);
        if (m.find()) {
          System.out.println("match found for regex " + regex );
          System.out.println("matched substring: "+ m.group());
        } else {
          System.out.println("match not found for regex " + regex);
        }
      });

    } catch (FileNotFoundException ex) {
      ex.printStackTrace();
    }

  }

  public static void main(String args[]) {

    String path = "/code/sql.pattern";
    String sql = "select * from schema.test";
    RegexMatches regex = new RegexMatches();
    regex.findfile(path);
    regex.readfilecontent(path, sql);

  }
}

при сохранении /code/sql.pattern, как показано ниже:

\buser\b
\border\b
\bfrom\b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...