Java REGEX - 无法删除标记内的内容

时间:2017-03-08 07:22:14

标签: java regex

这是我的输入文字:

   Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.HOUR_OF_DAY, -1);
    long startTime = cal.getTimeInMillis();

    // Create a data source
    DataSource dataSource = new DataSource.Builder()
            .setAppPackageName(context)
            .setDataType(DataType.TYPE_CALORIES_EXPENDED)
            .setStreamName(TAG + " - Calorie")
            .setType(DataSource.TYPE_RAW)
            .build();

    // Create a data set
    int CalDelta = 50;
    DataSet dataSet = DataSet.create(dataSource);
    // For each data point, specify a start time, end time, and the data     value -- in this case,
    // the number of new steps.
    DataPoint dataPoint = dataSet.createDataPoint()
            .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    dataPoint.getValue(Field.FIELD_CALORIES).setFloat(CalDelta);
    dataSet.add(dataPoint);

我正在尝试删除[QUOTE] [/ QUOTE]标记和标记本身内的所有内容。

我希望输出为:

[QUOTE=SynapseBreak;104047835]Armchio de dragon is satki dragon lai de leh

[URL="https://play.google.com/store/apps/details?id=com.shiportal.hwzreader&referrer=utm_source%3Dsignature%26utm_medium%3Dforum"]Sent from 權志-龍 using GAGT[/URL][/QUOTE]
why satki ? tell me :s13:

[QUOTE=articated;104047854]I not sad lah
U happy i happy kym

Just for fun loh :s12:
[ms]自從我變成了狗屎,就再也沒有人敢踩在我頭上了 HardwareZone Forums app[/ms][/QUOTE]
today arti jin sweet make me happy :s12:

[QUOTE=Iandao;104047967]Gg mbs now...[/QUOTE]
go there jiak simi ??

我尝试的代码是:

why satki ? tell me :s13: today arti jin sweet make me happy :s12: go there jiak simi ??  

3 个答案:

答案 0 :(得分:2)

请注意,仅当输入不包含嵌套的[QUOTE] tages 时,才可以对模式使用以下修复。

正则表达式中的.与换行符不匹配,.*过于贪婪,即匹配字符串中一行/上的[/QUOTE]的最后一次出现。

使用与Pattern.DOTALL内联修饰符(嵌入标记选项)(?s)的延迟点匹配,这将强制.匹配任何字符:

"(?s)\\[QUOTE=.*?\\[/QUOTE\\]" 
 ^^^^         ^^^

请参阅this regex demo

或者,展开延迟点(以使模式更快地找到匹配项):

"\\[QUOTE=[^\\[]*(?:\\[(?!/QUOTE\\])[^\\[]*)*\\[/QUOTE\\]"

请参阅this regex demo

Java demo

String pat = "\\[QUOTE=[^\\[]*(?:\\[(?!/QUOTE])[^\\[]*)*\\[/QUOTE]";
String str = "[QUOTE=SynapseBreak;104047835]Armchio de dragon is satki dragon lai de leh\n\n[URL=\"https://play.google.com/store/apps/details?id=com.shiportal.hwzreader&referrer=utm_source%3Dsignature%26utm_medium%3Dforum\"]Sent from 權志-龍 using GAGT[/URL][/QUOTE]\nwhy satki ? tell me :s13:\n[QUOTE=articated;104047854]I not sad lah\nU happy i happy kym\n\nJust for fun loh :s12:\n[ms]自從我變成了狗屎,就再也沒有人敢踩在我頭上了 HardwareZone Forums app[/ms][/QUOTE]\ntoday arti jin sweet make me happy :s12:\n\n[QUOTE=Iandao;104047967]Gg mbs now...[/QUOTE]\ngo there jiak simi ??'";
String res = str.replaceAll(pat, "");
System.out.println(res); 
// => why satki ? tell me :s13:
//
//    today arti jin sweet make me happy :s12:
//
//
//     go there jiak simi ??'

答案 1 :(得分:1)

你的正则表达式没有考虑新的线条。这是通过在开头添加(?s)来完成的。

string.replaceAll("(?s)\\[QUOTE.*?\\[/QUOTE\\]", "");

答案 2 :(得分:1)

(?s)\\[QUOTE.*?\\[/QUOTE\\]

尝试以上RegEx。它会起作用。