我在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.对于我的问题,我们可以假设
/
。它的扩展名只有.jpg
。其他扩展名将不存在。我的问题是如何分割文字?我们需要一个java正则表达式,例如*![*](*.jpg)
?
答案 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可以保持空白 - 虽然没有意义