2013-07-01 64 views
0

我正在写一个正则表达式来匹配“japan”的每一个出现处,并用“Japan”替换它。为什么下面的工作不成功?而“日本”可以在一个句子中的任何地方出现多次。我想替换所有的事件用另一个替换所有出现的单词

public static void testRegex() 
{ 
    String input = "The nonprofit civic organization shall comply with all other requirements of section 561.422, japan laws, in obtaining the temporary permits authorized by this act."; 
    String regex = "japan"; 
    Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(input); 
    System.out.println(input.matches(regex)); 
    System.out.println(input.replaceAll(regex, "Japan")); 

} 
+0

当你运行这个时你会得到什么输出? –

+0

什么在这里不起作用?你的replaceAll对我来说似乎很好。 –

+0

正则表达式匹配评估为false。 – Phoenix

回答

7

您不需要这里的正则表达式,也不需要Pattern和Matcher类。使用简单String.replace()将正常工作:

input = input.replace("japan", "Japan"); 
+0

我必须使用正则表达式,因为这是一个外部API,我正在使用 – Phoenix

+1

@Phoenix。它仍然不能说服我使用正则表达式。你用什么方式使用api? –

+0

它是通过弹簧配置的 – Phoenix

2

replaceAll是否按预期运行。

从您的评论:

正则表达式匹配结果为false。

此语句评估为false

System.out.println(input.matches(regex)); 

String#matches相匹配的完整的String。由于String"japan"不是一个正则表达式,你可以做

System.out.println(input.contains(regex)); 
0

input.matches(regex)自锚你的模式与^$。只需用.*即可将您的模式包围以匹配。

但之后,replaceAll将不再工作。因此,您必须用$1Japan$2替换(.*?)japan(.*?)

相关问题