Java正则表达式不敏感不起作用

时间:2011-01-27 06:43:23

标签: java regex

我正在尝试使用以下程序使用正则表达式删除字符串中的某些单词。它正确删除,但它只考虑区分大小写。如何使其不区分大小写。我在(?1)方法中保留了replaceAll,但它无效。

package com.test.java;

public class RemoveWords {

    public static void main(String args[])
    {

        // assign some words to string

        String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";

            System.out.print(sample.replaceAll("( is | the |in | any )(?i)"," "));
    }
}

输出:

what Is latest news today  Europe? there thing special or everything common.

3 个答案:

答案 0 :(得分:32)

您需要将(?i) 放在模式中要使用不区分大小写的部分之前:

System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," "));
                                    ^^^^

See it

我已使用字边界(\\b)替换要删除的关键字周围的空格。出现问题是因为可能有两个关键字一个接一个地被一个空格隔开。

如果您想仅在空格包围的情况下删除关键字,那么您可以使用正向前瞻和后视:

(?i)(?<= )(is|the|in|any)(?= )

See it

答案 1 :(得分:4)

我认为您不能使用快速替换指定不区分大小写。 尝试使用模式。即:

package com.test.java;

public class RemoveWords {

public static void main(String args[]) {
  // assaign some words to string
  String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";
  String regex = "( is | the |in | any )"
  System.out.print
  (
    Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("")
  );
 }
}

答案 2 :(得分:1)

is更改为[iI][sS]

sample.replaceAll("( [iI][sS] ...