2013-02-27 59 views
0

我需要从字符串中提取子:需要帮助找出正确的正则表达式模式

给定的字符串:"< 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,它将包含两个提取的子字符串。

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

我的模式不工作!非常感激你的帮助。 在此先感谢!

+1

试试这个网站http://www.regexplanet.com/ – Elmer 2013-02-27 18:54:08

+0

一个问题是: ''[...]'并不意味着你的想法。它是*字符类*的符号,例如([例如]'[abc]'表示“a','b'或者'c''。 – ruakh 2013-02-27 18:57:47

回答

1

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

这将匹配<之间的事情;>

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

+0

非常感谢!这工作! – kajarigd 2013-02-27 19:10:31

0

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

下一步将捕获组。你通常使用()

你还必须担心在你的正则表达式混乱的字符串开头<讨厌的文物。为了解决这个问题,你需要排除你的正则表达式。

你可能最终

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

为您的正则表达式。一定要检查的特定的Java文件和逃避你的\

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

最终结果如果你想下一个其它<>你尖尖的括号内,正则表达式有很多麻烦的那种的事情,也许你应该尝试不同的方法

Here's a sample regex

+0

非常感谢您的回复!这非常有帮助! – kajarigd 2013-02-28 06:43:15