使用Java中的正则表达式替换字符组

时间:2016-02-24 11:19:52

标签: java regex

我有一个这样的字符串:

<b.*?n.*? .*?a.*?n.*? .*?e.*?&nbsp;.*? .*? .*? .e.*?t.*?e.*?   .*?   .*? .*? .*?<.r>.*? .*?e.*? .*? .*? .*?l.*?e .*?b.*?e.*?n.*?b.*? .*?  .*?a.*?p.*?t.*? .*?l.*? .*? .*? .*? .*? ..b.*? .*? .*?s.*?   .*?s.*?   .*?>.*? .*?es.*? .*?n.*?t.*?r.*? .*? .*? .*? .n.*?b.*? .*? .*? .*? .*? .*?e.*? .*? .*? .*? .*?t.*?n.*? .*? .*? .*? .*?n.s.. .*?a. .*? <.*?e.e.*? comp.*? .*?<.*? .*?r.*?el.*?&.*?b.*? .*? .*?y.*? ..e.*? .. .*? .*? .*? .*? .*?u.t.*?m..o.*?b.*?r.*?e.*?n.*?o.. .*? .*?s. .*?e.*?o.. .*?r.*?r.*?&.*?b.*? ..b>.*?o.*?s.*? .*?r.*? .*? .*?a..i.*? .*? .*? .*?e.*?in.*? .*? .*? .*? .*? .*? .*? ..b.*? .*? .*? .*?r..i.*?c.*? .*? .*?o.*?<..>.*?

很抱歉,*已从上面的文字中移除。

我希望能够将.*?的连续外观替换为单个.*?。我试过了

res = tmp.replaceAll("(\\s\\.\\*\\?)(\\1{2,})","\\s\\.\\*\\?");

但它不起作用。我的代码中有什么问题吗?

3 个答案:

答案 0 :(得分:0)

我建议你使用循环并替换它。类似关注

        String pattern= "(.\*\?\s.\*\?)";
        if(YOURSTRING.matches(pattern)){
            // replace two .*? to one 
        }
        else{ 
            // break your loop   
            }

这不是一个完整的解决方案。但是一些基本的想法

答案 1 :(得分:0)

你可以试试这个:

String str = "abcabcddabceeabcabc";
str = str.replaceAll("[abc]+", "abc");
System.out.println("str = " + str);

示例:

str = abcddabceeabc

结果:

$.post("switch-up-control.php", {
        ip: ip,
        id: sw_id
    }, function(response){
         eval(response);        //i want run code here.
    });

答案 2 :(得分:0)

您可以使用

(\s*)(?:\s*\.\*\?){2,}

并替换为$1.*?。第1组反向引用$1将在第一个.*?之前保留初始空格。

正则表达式匹配:

  • (\s*) - 第1组:零个或多个空白符号
  • (?:\s*\.\*\?){2,} - 两个或更多序列:
    • \s* - 零个或多个空白符号
    • \. - 一个文字点
    • \* - 文字星号
    • \? - 文字?符号

请参阅regex demo

示例代码:

String p = "(\\s*)(?:\\s*\\.\\*\\?){2,}"; 
String str = "<b.*?n.*? .*?a.*?n.*? .*?e.*? \\.*? .*? .*? .e.*?t.*?e.*?   .*?   .*? .*? .*?<.r>.*? .*?e.*? .*? .*? .*?l.*?e .*?b.*?e.*?n.*?b.*? .*?  .*?a.*?p.*?t.*? .*?l.*? .*? .*? .*? .*? ..b.*? .*? .*?s.*?   .*?s.*?   .*?>.*? .*?es.*? .*?n.*?t.*?r.*? .*? .*? .*? .n.*?b.*? .*? .*? .*? .*? .*?e.*? .*? .*? .*? .*?t.*?n.*? .*? .*? .*? .*?n.s.. .*?a. .*? <.*?e.e.*? comp.*? .*?<.*? .*?r.*?el.*?&.*?b.*? .*? .*?y.*? ..e.*? .. .*? .*? .*? .*? .*?u.t.*?m..o.*?b.*?r.*?e.*?n.*?o.. .*? .*?s. .*?e.*?o.. .*?r.*?r.*?&.*?b.*? ..b>.*?o.*?s.*? .*?r.*? .*? .*?a..i.*? .*? .*? .*?e.*?in.*? .*? .*? .*? .*? .*? .*? ..b.*? .*? .*? .*?r..i.*?c.*? .*? .*?o.*?<..>.*?"; 
String subst = "$1.*?"; 
System.out.println(str.replaceAll(p, subst));

请参阅IDEONE demo