Java正则表达式可将整个单词与特殊字符的任意组合匹配

时间:2018-06-20 17:15:42

标签: java regex

我想创建一个与我的字符串匹配的正则表达式,以用于特殊字符的任何组合。我的字符串可能包含特殊字符,也可能不包含任何特殊字符,并且特殊字符的位置也不固定,它们可能在字符串中的任何位置。

我尝试了以下代码

String myString = new String("{{Hello}}");
    System.out.println(myString);
    System.out.print("Return Value :");
    System.out.println(myString.matches("\\*"+myString+"\\*"));

但是我总是遇到以下错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 1

myString are "{Abc}","{{#DER#&@}}", "%^&my%%**WORLD", ":,WhatAre$#$YouDOING:$$"的可能组合

在大多数情况下,特殊字符将包围字符串(你好)。但是没有定义计数。它们的两侧可能不相等,并且可能甚至没有出现在字符串周围。

5 个答案:

答案 0 :(得分:2)

引用目标,但是如果目标是较大单词的 part (例如文本event中的prevent)时要防止匹配,请在目标的结尾是文字字符:

str.matches(".*(?=\\b\\w|\\W)"
  + Pattern.quote(myString)
  + "(?<=\\w\\b|\\W).*")

答案 1 :(得分:1)

根据我对您的要求的了解,这应该可行:

String fixedString = "hello";
String stringToMatch = "{{hello}}";
String pattern = "\\W*"+Pattern.quote(fixedString)+"\\W*";
System.out.println("Match ?" + stringToMatch.matches(pattern));

它用一个非单词字符重复(0次或多次)将固定字符串括起来。

答案 2 :(得分:0)

不清楚要实现什么。您的输入和正则表达式是相同的字符串。但是,要解决当前程序中的错误,请执行以下操作。

您可以这样定义正则表达式-

   private static final String REGEX = "\\{\\{Hello\\}\\}";

并将其传递给matchs()方法。那应该做你的工作。在将正则表达式传递给matchs()方法之前,您必须转义这些特殊字符。

答案 3 :(得分:0)

您的模式匹配方法语法错误,匹配参数为regex。 使用正确的语法如下。

String regex = "[a-zA-Z._ ^%$#!~@,-{}]+";
String input = "{{word ofregex}}";
System.out.println(input.matches(regex));
System.out.println(Pattern.matches(regex, input));

答案 4 :(得分:0)

明确定义要查找的字符。从您在注释中提供的示例中,一些测试用例为:

  1. {Abc}
  2. {{#DER#&@}}
  3. %^&my%%**WORLD
  4. :,WhatAre$#$YouDOING:$$

其中许多字符需要转义,并且您还需要记住\中的String必须写成\\(转义)。

以第二个示例(其中包含DER的示例)为例,匹配[#\^&@]这样的正则表达式。因此,一种可能的解决方案是识别所有要查找的特殊字符,并将它们放在适当的转义字符类中(由方括号之间的内容定义)。

here是用于正则表达式测试的有用资源,而here是另一个用于更深入研究正则表达式的资源。