当前位置: 首页 > 知识库问答 >
问题:

如何用正则表达式扫描特定的字符串?

葛念
2023-03-14

我有一个字符串,我想检查它是否包含某些特定字符。如果包含此字符,则必须出现错误消息

我有一个想法,并计划使用类“模式”和“匹配器”:

public boolean sourceIncludesValidCharacters(String sourceToScan, String searchCharacter) {

    boolean sourceIncludesValidCharacters = true;

    if (StringUtils.isBlank(sourceToScan)) {
        sourceIncludesValidCharacters = false;
    } else {
        Pattern pattern = Pattern.compile(searchCharacter);
        Matcher matcher = pattern.matcher(sourceToScan);
        sourceIncludesValidCharacters = !matcher.find();
    }
    return sourceIncludesValidCharacters;
}

现在我需要一种正则表达式来检查我的字符串(或者换句话说,参数“source ceToScan”。正则表达式必须被过滤符号,如[]/{}%$§等等…

如何在示例中实现此解决方案?

共有2个答案

刘明朗
2023-03-14

要详细说明清洁度,string.contains()方法和正则表达式方法的比较,用String.contains():

String specialChars[] = {"]", "["};

for (String char: specialChars) {
    if (targetString.contains(char)) {
         return false;
    }
}
return true;

和正则表达式

String specialCharsPattern = ".*[\\]\\[].*";

if (targetString.matches(specialCharsPattern)) {
     return false;
}
return true;

例子:

class Match {
    public static void main(String args[]) {
        String str = "test[me";
        System.out.println(str + ": " + containsSpecialCharsRegEx(str));
        System.out.println(str + ": " + containsSpecialCharsContains(str));
    }
    public static boolean containsSpecialCharsRegEx(String targetString) {
        final String specialCharsPattern = ".*[\\]\\[].*"; // for the symbols [ and ] in this example

        if (targetString.matches(specialCharsPattern)) {
             return true;
        }
        return false;
    }
    public static boolean containsSpecialCharsContains(String targetString) {
        final String[] specialCharsArr = {"]", "["}; // for the symbols [ and ] in this example

        for (String specialChar: specialCharsArr) {
            if (targetString.contains(specialChar)) {
                return true;
            }
        }
        return false;
    }
}

我当然认为.包含它更干净,更容易理解。

戚飞雨
2023-03-14

使用< code>String#contains,这里不需要regex:

String[] mySpecialChars = ....;   //I advise to make it constant
for(String special : mySpecialChars) {
   if(myStr.contains(special)) {
      //error
   }
}

你可以把它放在一个方法中,以获得更清晰的解决方案:

private boolean containsSpecialChars(String myStr) {
    String[] mySpecialChars = ....; 
    for(String special : mySpecialChars) {
       if(myStr.contains(special)) {
          return false;
       }
    }
    return true;
}

注意:Regex适合在您有一些模式的情况下使用。在这种情况下,您只需要检查字符串中是否存在某些字符,而不是任何特殊/特定的模式。这就是为什么在这里使用regex不太合适的原因。

 类似资料:
  • 问题内容: 我想搭配以下 com.my.company。 moduleA .MyClassName com.my.company。 moduleB .MyClassName com.my.company。 anythingElse .MyClassName 但 不是 以下 com.my.company。 核心 .MyClassName 我当前的简单正则表达式模式是: 因此,基本上,我该如何匹配其他

  • 我知道除了扫描预定义的< code >原语类型,我还可以扫描自己的用户定义模式,这在扫描更复杂的数据时很有帮助。我说的是< code > scanner . next(String pattern)方法。然而,在我读过的关于Java的书中,有一段说 “使用正则表达式进行扫描时有一个警告。该模式仅与下一个输入令牌匹配,因此,如果您的模式包含分隔符,则永远不会匹配。 我不太明白这是什么意思,在哪些情况

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自

  • 我想使用正则表达式屏蔽字符串的子字符串。 字符串输入=

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • https:www.google。com/;ParamName=项目;AccessKey=PDJKJDSJJKNEIOWEMCL/dsjdkhfjf=;值=xyz 在这里,我想用一些虚拟字符串替换值并返回整个字符串。 预期输出:<代码>https:www.google。com/;ParamName=项目;AccessKey=dummyValueHere;值=xyz 是否有人可以通过使用replac