Java如何从字母中验证希伯来语文本

时间:2019-02-22 17:02:47

标签: java regex matching hebrew

我需要验证信中的希伯来文字 这封信的正文是:

  

שלום,

     

约翰·萨利文(John Salivan)。 מועדהייעוץנקבעלתאריך   23/02/2019בשעה20:45。

     

לביצועהייעוץישלכנסכנס

但是我的正则表达式与文本不匹配

    public static void findBadLines(String fileName) {

    Pattern regexp =  Pattern.compile(".*שלום,.*תואם ייעוץ וידאו עם המטופל John Salivan. .*מועד הייעוץ נקבע לתאריך .* בשעה.*..*לביצוע הייעוץ יש להכנס .*");
    Matcher matcher = regexp.matcher("");

    Path path = Paths.get(fileName);
    //another way of getting all the lines:
    //Files.readAllLines(path, ENCODING);
    try (
            BufferedReader reader = Files.newBufferedReader(path, ENCODING);
            LineNumberReader lineReader = new LineNumberReader(reader);
    ){
        String line = null;
        while ((line = lineReader.readLine()) != null) {
            matcher.reset(line); //reset the input
            if (!matcher.find()) {
                String msg = "Line " + lineReader.getLineNumber() + " is bad: " + line;
                throw new IllegalStateException(msg);
            }
        }
    }
    catch (IOException ex){
        ex.printStackTrace();
    }
}

final static Charset ENCODING = StandardCharsets.UTF_8;

}

1 个答案:

答案 0 :(得分:0)

我说对了,您不会检查给定输入中是否有希伯来语文字吗?

如果这样,请使用该正则表达式.*[\u0590-\u05ff]+.*

[\u0590-\u05ff]+匹配一个或多个希伯来字符,.*在需要匹配其余输入之前和之后。

分别

   Pattern regexp =  Pattern.compile(".*[\u0590-\u05ff]+.*");
        //...
        matcher.reset(line); //reset the input
        if (!matcher.matches()) {
            String msg = "Line " + lineReader.getLineNumber() + " is bad: " + line;
            throw new IllegalStateException(msg);
        }