因此,我正在为用户输入制作正则表达式模式和匹配器,并使用串联生成将用于Pattern.compile()的字符串。 我无法匹配模式,但是当我打印连接的结果并将其放在Pattern.compile中时,它与模式匹配。我尝试了不同的连接方式,但仍然不匹配。
for(int i = 0; i < 3; i++){
Matcher elementMatcher = element.matcher(inputArr[i]);
if(elementMatcher.matches()) inputPattern += elemString;
else if(inputArr[i].equals("+") || inputArr[i].equals("*") || inputArr[i].equals(".") || inputArr[i].equals("(")|| inputArr[i].equals(")") || inputArr[i].equals("-") || inputArr[i].equals("/")){
inputPattern += "\\\\";
inputPattern += inputArr[i];
}
else inputPattern += inputArr[i];
inputPattern += "\\\\s*";
}
if(inputPattern.equals("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*"))
System.out.println(inputPattern); //prints [a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*
pattern1 = Pattern.compile(inputPattern);
matcher1 = pattern1.matcher(value[j]);
if(matcher1.matches()) {
result = value[j];
System.out.println("YO");
}
奇怪的是,它在
时有效pattern1 = Pattern.compile("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*");
但打印inputPattern会产生[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*
和
pattern1 = Pattern.compile(inputPattern);
产生不同的结果
答案 0 :(得分:0)
Java在字符串文字中具有转义序列。如果字符串包含\
,则表示下一个字符将以特殊方式解释。
要将\
添加到字符串中,您需要对其进行转义"\\"
。
以下是一些示例代码:
String s = "\\";
System.out.println(s); // print single slash
答案 1 :(得分:0)
我认为您的问题是如何在模式字符串中获取适当数量的\字符。要将单个\字符转换为文字字符串,您需要输入两个:“ \\”将为您提供一个带有单个\字符的字符串。该字符串将打印为\。因此,如果您有一个打印为\\的字符串,则可能是在文字字符串中使用四个\创建的,因为“ \\\\”将打印为\\。
通常,最好尽量简化以了解和解决此类问题!