0

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

元素应该以两个方括号开始,并以两个方括号结束,它们之间有一个单词或一个句子。

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

例如。如果我[[this is an example]]在遍历数组时遇到,我应该输出"this is an example". 应该对包含在双方括号中的所有字符串执行此操作。

4

3 回答 3

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

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

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

正则表达式可视化

于 2013-10-25T20:02:37.360 回答
2

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

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

由于使用(DOTALL) ,这也将在[[和之间抓取多行句子]](?s)

于 2013-10-25T19:58:58.873 回答
0

\\[\\[([^]]*)\\]\\]可以用作@anubhava 答案的细微变化。正如这里的评论指出的那样,它不会捕获[[a]b]],但我无法判断这是否是您要求的一部分。

于 2013-10-25T20:04:35.273 回答