正则表达式在字符串pattren之间查找文本

时间:2020-05-22 08:05:47

标签: java regex

字符串: [img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]

我想要的结果 [img border=0]images/bbcode/sets/misc/bullet_go.png[/img],不带/scm/文本。

问题: 文本scm不是静态的,可以是数据中的任何其他文本。

我想要的是 :查看此字符串
[img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]
正则表达式可以获取]images/bbcode/之间的文本,因此正则表达式将检测到\scm\文本,然后可以从字符串数据中删除此\scm\,最终结果看起来像 [img border=0]images/bbcode/sets/misc/bullet_go.png[/img]

PS:我正在Java中实现此逻辑。

谢谢。如果不清楚,请询问并评论and

4 个答案:

答案 0 :(得分:2)

您也无需使用正则表达式就可以实现目标。

由于您说其他部分是静态的,请尝试以下操作:

String myStr = "[img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]";
myStr = "[img border=0]" + myStr.substring(myStr.indexOf("images"));
System.out.println(myStr);

,输出将是:

[img border=0]images/bbcode/sets/misc/bullet_go.png[/img]

答案 1 :(得分:1)

如果[img border=0]是动态的,则可以使用/scm/以外的所有内容

some demo

   String input = "[img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]";

    Pattern p = Pattern.compile("(^.*\\])\\/.*?\\/(.*$)");

    Matcher m = p.matcher(input);
    if (m.find()) {
        String output = m.replaceFirst("$1$2"); 
        System.out.println(output);
    }



 // -> [img border=0]images/bbcode/sets/misc/bullet_go.png[/img]

答案 2 :(得分:1)

我捕获了']和/ images ..'之间的文本,并将此文本替换为“”。检查以下演示:

String s = "[img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]";
s = s.replaceAll("(?<=])/[^/]+/","");
System.out.println(s);

答案 3 :(得分:0)

我找到了解决该问题的另一种方法

String pattereString = "].*/images";

        String maineString = "[img border=0]/scm/images/bbcode/sets/misc/bullet_go.png[/img]";
        maineString = maineString.replaceAll(pattereString, "images");
        System.out.println(maineString);

输出:

[img border=0]images/bbcode/sets/misc/bullet_go.png[/img]