2016-04-03 69 views
2

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

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

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

  • Alt键文字部分只包含字符AZ,az和空格。
  • The URL部分只包含数字0-9和斜杠/。其扩展名仅为.jpg。其他扩展将不存在。

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

+0

一个正则表达式,肯定的 - 为什么不呢?你的正则表示法与标准表示法不同吗? – usr2564301

+0

不,我的正则表示法假定与标准法相同。如果有错误,那是我的错。 (我对正则表达式知之甚少) –

回答

4

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

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

有关如何获取比赛信息请参见here

“污点” 的版本: !\[[^\]]+\]\([^)]+\)

说明

  • !字面上!
  • \[逃脱[
  • [^\]]+许多不] S作为可能
  • \]\(逃脱](
  • [^)]+许多不) S作为可能
  • \)逃脱)
+0

It works !!!你能添加一些解释吗?好奇知道 –

+0

@MincongHuang补充!我解释了“无知”的版本。 – Laurel

+0

精彩的解释。我从中学到了很多,谢谢@Laurel –

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