我想创建一个与我的字符串匹配的正则表达式,以用于特殊字符的任何组合。我的字符串可能包含特殊字符,也可能不包含任何特殊字符,并且特殊字符的位置也不固定,它们可能在字符串中的任何位置。
我尝试了以下代码
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:$$"
的可能组合
在大多数情况下,特殊字符将包围字符串(你好)。但是没有定义计数。它们的两侧可能不相等,并且可能甚至没有出现在字符串周围。
答案 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)