【问题标题】:Java regex on a long string(String buffer)长字符串上的 Java 正则表达式(字符串缓冲区)
【发布时间】:2014-08-04 19:30:09
【问题描述】:

我实际上有 2 个问题。 第一个理论 - 如果我在 StringBuffer 中有一个长文本并且我想在其中找到一个正则表达式 - 我是否必须担心 StringBuffer 会占用 StringBuffer 的块在每个块中查找正则表达式,如果它在任何块中都找不到这样的正则表达式,它会看起来好像文本中的正则表达式不存在?如果正则表达式的一部分位于一个块的边界,而其余的正则表达式位于相邻块的边界怎么办?

第二个:

String patternString1 = "(\\[\\[Category.*\\]\\])";
Pattern pattern1 = Pattern.compile(patternString1);
Matcher matcher1 = pattern1.matcher(text);
while (matcher1.find()){
System.out.println(matcher1.group(1));
}

我想从字符串中提取所有看起来像这样 [[Category: .*]] 的表达式,但是如果整个文本看起来像这样:

[[类别:PrintingOut [[HP 打印机]] [[HewlettPackard]] ]] [[LaserJet]]

我想确保“]]”是我的正则表达式的结尾。换句话说 - 如果我在我的表达式中找到 [[ .* ]] 我不希望内部 [[.*]] 的结尾被视为我整个表达式的结尾。

【问题讨论】:

  • 所以你不想要[[LaserJet]]
  • 在这种情况下的预期输出[[Category: PrintingOut [[Printer HP]] [[HewlettPackard]] ]] [[LaserJet]]
  • 是的,在此示例中,我希望在 matcher1.group(1) 中找到并显示 [[Category: PrintingOut [[Printer HP]] [[HewlettPackard]] ]]
  • 如果您有2个问题,请分别提出。

标签: java regex stringbuffer


【解决方案1】:

这可能会对你有所帮助。

\[\[Category:.*?\s\]\]

这是Debuggex上的演示


编辑

在关闭]]之前尝试下面的正则表达式,如果有空间或没有空间,它会起作用

\[\[Category:.*?[(\]\])\s]+\]\]

这是Debuggex上的演示

注意:只需将此正则表达式模式包含在 () 中,然后在索引 1 处获取组。

【讨论】:

  • 匹配前没有空格怎么办]]
  • 好的,然后需要更改正则表达式。让我也试试这个案例。
  • 这可能有效\[\[Category:.*[(\]\])\s]+\]\] 并在我的帖子中编辑了内联演示的链接。
猜你喜欢
  • 2011-01-01
  • 2015-06-11
  • 2014-10-22
  • 2013-07-10
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多