2012-06-28 39 views
6

任何人都可以帮助我在java中为变量创建正则表达式,这样字符串变量将被视为不区分大小写,并替换每个单词,如Access,等WINDOWS的任何事情呢?不区分大小写字符串的变量replaceAll(,)方法Java

这是代码:

$html=html.replaceAll(label, "WINDOWS"); 

注意,标签是一个字符串变量。

+4

为什么不简单地将一个不区分大小写的字符串添加到标签String? '“(?i)”' –

+0

@pst:抱歉,弄错了。编辑我的评论。 –

+0

也许还请注意replaceAll作为第一个参数需要什么......然后将其作为答案发布? ;-) – 2012-06-28 00:36:47

回答

23

只是“不区分大小写”开关添加到正则表达式:

html.replaceAll("(?i)"+label, "WINDOWS"); 

注意:当标签是一个正则表达式本身时,请仔细考虑,例如,假设标签为".*"

+3

有一个引用标签的函数,以确保它被视为文字。 'Pattern.quote()'http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern。HTML#报价(java.lang.String中) – nhahtdh

1

只需使用模式和匹配器。这里是代码

Pattern p = Pattern.compile("Your word", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher("String containing words"); 
String result = m.replaceAll("Replacement word"); 

使用模式很容易,因为它们不区分大小写。

欲了解更多信息,请参阅

Matchmaking with regular expressions

Java: Pattern and Matcher

+0

这是怎么回事? str.replaceAll(reg,replacement)与Pattern.compile(reg).matcher(str).replaceAll(替换)完全相同 – anttix

+0

使用匹配器不区分大小写。请参阅javaworld中的文章 –

+0

@SriHarshaChilakapati“这取决于”。与anttix的答案比较。 – 2012-06-28 00:55:44

7

String.replaceAll是等效于创建一个匹配,并调用它的replaceAll方法,所以你可以做这样的事情,使其不区分大小写:

html = Pattern.compile(label, Pattern.CASE_INSENSITIVE).matcher(html).replaceAll("WINDOWS"); 

见:String.replaceAll和 周Pattern.compile的JavaDoc

+0

对大字符串使用不区分大小写(与Java的默认区分大小写敏感的replace()方法相反)是否会对内存/性能产生重大影响?例如,包含预定义标签(变量)的文档可以基于某些应用逻辑动态替换。 –

0

我想,但我不知道你想标签是像[Aa][cC][cC][eE][sS][sS]

或交替做

html = Pattern.compile(lable, Pattern.CASE_INSENSITIVE) 
     .matcher(html).replaceAll("WINDOWS"); 
相关问题