找出合适的正则表达式模式需要帮助

时间:2013-02-27 18:51:20

标签: java regex

我需要从字符串中提取子字符串:

给定字符串:"< If( ( h == v ) ): { [ < j = (i - f) ;>, < k = (g + t) ;> ] }>" 我需要两个子字符串:"j = (i - f)""k = (g + t)"

为此,我尝试了用户模式正则表达式。这是我的代码:

Pattern pattern = Pattern.compile("[<*;>]");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group());
      }

out.get(i).toString()是我的输入字符串。 B2是一个ArrayList,它将包含两个提取的子串。

但是,在运行上面的代码之后,我得到的输出是:[<, <, ;, >, <, ;, >, >]

我的模式不起作用!非常感激您的帮忙。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用表达式<([^<]+);>

这将匹配&lt;和;&gt;

Pattern pattern = Pattern.compile("<([^<]+);>");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group(1));
      }

您可以在regexplanet上看到结果:http://fiddle.re/5rty6

答案 1 :(得分:0)

您的[]会导致您遇到问题。这些符号表示:"match one among the symbols inside of these"如果删除这些符号,您将获得更好的结果。当你这样做时,你还必须逃避你的尖括号。

下一步将是捕捉群组。您通常会使用()

你还必须担心令人讨厌的文物,例如字符串开头的<,这会弄乱你的正则表达式。为了解决这个问题,你需要从你的正则表达式中排除它们。

你最终可能会

"\<([^<>]*?)\>"

作为你的正则表达式。请务必查看特定的java文档,并转义\以获取

的最终结果
"\\<([^<>]*?)\\>"

如果你想要在你的尖括号内的下一个<>,那么正则表达式在这类事情上有很多麻烦,也许你应该尝试不同的方法

Here's a sample regex