如何为[[gold]]或[[Archimedes]]等单词编写正则表达式

时间:2013-10-25 19:54:04

标签: java regex string

我有一个字符串数组。我正在检查数组的每个元素中的以下模式:[[some word]]

元素应以两个方括号开头,并以2个方括号结尾,并在它们之间加上单词或句子。

我还需要从[[some word]]中提取字符串“some word”。我无法弄清楚Java中的正则表达式。它们似乎与PHP等脚本语言非常不同。

EG。如果我在遍历数组时遇到[[this is an example]],我应该输出"this is an example"。对于用双方括号括起来的所有字符串都应该这样做。

3 个答案:

答案 0 :(得分:3)

以下代码:

String input = "How to write a regex for words like [[gold]] or [[Archimedes]] in JAVA";
String regex = "\\[\\[(.*?)\\]\\]";
Matcher matcher = Pattern.compile(regex).matcher(input);
int idx=0;
while(matcher.find(idx)){
  String match = matcher.group(1);
  System.out.println(match);
  idx = matcher.end();
}

打印:

gold
Archimedes

实际的正则表达式(没有转义\)是:

\[\[(.*?)\]\]

Regular expression visualization

答案 1 :(得分:2)

我相信这个正则表达式适合你:

"(?s)\\[\\[(.*?)\\]\\]"

由于使用[[(DOTALL)

,这也会抓取]](?s)之间的多行句子

答案 2 :(得分:0)

\\[\\[([^]]*)\\]\\]可以作为@ anubhava答案的略微变化。正如这里的评论指出的那样,它不会抓住[[a]b]],但我无法判断这是否属于您的要求。