1

我需要获取包含此文本的所有字符串 %variables% 此处的一些文本 %/variables%

例子

%enca% something here %variables% take this text %/variables% 
other stuffs here, I dont need this 
%variables% I need this too %/variables%
other stuffs, etc

我所拥有的是:

我试试这个:
%variables%(.*?)%/variables%

像这样工作(只有一场比赛)

http://regexr.com?34cge

但在 Java 中不起作用:

private boolean variablesTag(String s)
    {
    Pattern pattern = Pattern.compile("/%variables%(.*?)%/variables%/gs");
    Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {
     //do some stuff...stored, work with the string, etc...
    };

    return true;
}

如果你能告诉我把绳子带进去的方法,我真的很感激。我想要的是这样的:

把这个文本也拿走

我正在使用 NetBeans ...

解决方案

Pattern pattern = Pattern.compile("%variables%(.*?)%/variables%",Pattern.MULTILINE|Pattern.DOTALL);

没有标志不起作用

4

3 回答 3

1

尝试使用这种模式:-

Pattern.compile("%variables%(.*?)%/variables%");

然后像这样获取所需的值。选择你想要的。

while(matcher.find()){
        System.out.println(matcher.group()); //Prints this "%variables% take this text %/variables%"
        System.out.println(matcher.group(1)); //Prints this " take this text"
}
于 2013-04-03T04:38:21.953 回答
1

在 Java 中,您不需要正则表达式上的“/”分隔符,实际上使用它们是不正确的。如果您想在正则表达式中添加标志,则有两个参数版本Pattern.compile(请参阅API 文档)。

改变

Pattern pattern = Pattern.compile("/%variables%(.*?)%/variables%/gs");

例如:

Pattern pattern = Pattern.compile("%variables%(.*?)%/variables%", Pattern.DOTALL);

matcher.group(1)然后在循环内部访问捕获的内容。

于 2013-04-03T04:39:38.100 回答
0
public static void main(String... args) {

    String input = "%enca% something here %variables% take this text %/variables% "
            + "other stuffs here, I dont need this"
            + "%variables% I need this too %/variables%"
            + "other stuffs, etc";

    Pattern pattern = Pattern.compile("%variables%(.*?)%/variables%");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        String s = matcher.group(1);
        System.out.format("%s\n", s);
    }
}

输出

 take this text 
 I need this too 
于 2013-04-03T09:30:54.207 回答