2016-04-03 68 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