在Java中的String中查找markdown图像语法

时间:2016-04-03 22:24:44

标签: java regex markdown

我在Java中有一个长文本,它包含至少一个markdown图像语法。如果有N降价图像语法,我需要将字符串拆分为N+1个子串并将它们存储在String数组中,调用texts。例如,我有以下文字

Hello world!
![Alt text](/1/2/3.jpg)
Hello Stack Overflow!

然后Hello world!\n将存储在位置0,\nHello Stack Overflow!将存储在位置1.对于我的问题,我们可以假设

  • 替代文字部分仅包含字符A-Z,a-z和空格。
  • 网址部分仅包含数字0-9和斜杠/。它的扩展名只有.jpg。其他扩展名将不存在。

我的问题是如何分割文字?我们需要一个java正则表达式,例如*![*](*.jpg)

3 个答案:

答案 0 :(得分:8)

试试这个(准备复制粘贴):

"!\\[[^\\]]+\\]\\([^)]+\\)"

有关如何获得匹配的信息,请参阅here

"污点"版: !\[[^\]]+\]\([^)]+\)

解释

  • !字面意思!
  • \[已转义[
  • [^\]]+尽可能多]
  • \]\(已转义](
  • [^)]+尽可能多)
  • \)已转义)

答案 1 :(得分:0)

这是我的方式

public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
     List<String> allMatches = new ArrayList<String>();
     String str = "}```![imageName](/sword?SwordControllerName=KMFileDownloadController&id=c60b6c5a8d9b46baa1dc266910db462d \"imageName\")#### JSON data";
     Matcher m = Pattern.compile("\\[.*\\]\\((.*)\\)").matcher(str);
     while (m.find()) {
         allMatches.add(m.group(1).split(" ")[0]);
     }
     //print "/sword?SwordControllerName=KMFileDownloadController&id=c60b6c5a8d9b46baa1dc266910db462d"
     for(String s:allMatches){
         System.out.println(s);
     }
  }
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

答案 2 :(得分:0)

!\[[^\]]*?\]\([^)]+\)

那样Alt Text可以保持空白 - 虽然没有意义