gpt4 book ai didi

java - Android 中的正则表达式匹配器

转载 作者:行者123 更新时间:2023-11-30 00:34:03 24 4
gpt4 key购买 nike

我在 Android 环境中设置 RegEx 匹配器时遇到问题。

我的字符串模式:

private static final String INVALID_PATTERN = "/[^а-яa-z0-9\\s,!\\-_{\\}\\[\\];+]/ig";

未转义模式(匹配所有内容,但西里尔字母和拉丁字母、数字、空格、逗号、感叹号、减号、下划线、方括号、分号和加号全局忽略大小写;我认为这些是“合法的”):

/[^а-яa-z0-9\s,!\-_\[\];+]/ig

我的代码:

public static ErrorType createStory(@NonNull String name){
Matcher m = Pattern.compile(INVALID_PATTERN).matcher(name);
if(m.matches()){
Log.e("Error", "Story name '" + name + "' contains illegal characters.");
return ErrorType.ILLEGAL;
}
//...
}

然而,这既不会抛出任何错误也不会起作用。

到目前为止我尝试过但没有奏效的方法(其中 string 是一个 String 变量):

  • string.matches(模式)
  • Pattern.compile(pattern).matcher(string).matches()

最佳答案

你需要使用

private static final String INVALID_PATTERN = "(?i)[а-яёa-z0-9\\s,!_{}\\[\\];+-]+";

并将其用作

public static ErrorType createStory(@NonNull String name){
Matcher m = Pattern.compile(INVALID_PATTERN).matcher(name);
if(!m.matches()){
Log.e("Error", "Story name '" + name + "' contains illegal characters.");
return ErrorType.ILLEGAL;
}
//...
}

解释:

  • (?i)[а-яёa-z0-9\\s,!_{}\\[\\];+-]+模式以不区分大小写的方式匹配指定的范围和字符(由于嵌入标志选项 (?i) ),出现 1 次或多次
  • 因为正则表达式匹配一个有效字符串,if (!m.matches())用于仅在正则表达式与字符串不匹配时显示错误
  • 作为.matches()需要完整的字符串匹配,没有 ^$模式中需要 anchor
  • 在 Android 正则表达式中,不使用正则表达式定界符,您传递正则表达式选项的方式是通过 Pattern.<FLAG>或通过内联修饰符(例如 (?i) )
  • 从西里尔字母的范围来看,您想要匹配俄语 字母,但是 а-я不包括 ё ,这就是我将它包含在字符类中的原因
  • 始终将连字符放在字符类的开头或结尾,它将始终被解析为文字 -象征。这是最佳实践,并且适用于任何正则表达式风格(如果放在开头 - 我知道的任何风格)。

如果您想使用消极方法,请使用

private static final String INVALID_PATTERN = "(?i)[^а-яёa-z0-9\\s,!_{}\\[\\];+-]";

在代码中,使用 if (m.find())

public static ErrorType createStory(@NonNull String name){
Matcher m = Pattern.compile(INVALID_PATTERN).matcher(name);
if(m.find()){
Log.e("Error", "Story name '" + name + "' contains illegal characters.");
return ErrorType.ILLEGAL;
}
//...
}

然后,如果字符串中存在非否定字符类中定义的字符,则会显示错误。 .find()不需要完整的字符串匹配,它允许部分匹配。

关于java - Android 中的正则表达式匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com