Java Regex澄清

时间:2011-11-03 09:32:28

标签: java regex

我有一个字符串:

<RandomText>
executeRule(x, y, z)
<MoreRandomText>

我想要完成的是:如果更大的文本块中存在此executeRule字符串,我想获得它的第二个参数。

我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

你的意思是更大的文本块是什么意思?

如果你想从那个表达式中提取第二个参数,那就像

executeRule\(\w+,\s*(\w+),\s*\w+\)

第二个参数保留在捕获组$ 1上。

请记住,要在Java中使用此表达式,您需要转义'\'。另外,我只是假设\ w足以匹配你的参数,这取决于你的特定规则。

如果您在Java中实际使用正则表达式需要一些帮助,那么您可以使用许多资源,我发现本教程非常简单并且它解释了基本用法: http://www.vogella.de/articles/JavaRegularExpressions/article.html

答案 1 :(得分:2)

import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
Pattern p = Pattern.compile("executeRule\\(\\w+, (\\w+), \\w+\\)");
Matcher m = p.matcher(YOUR_TEXT_FROM_FILE);
while (m.find()) {
  String secondArgument = m.group(1);
  ...process secondArgument...
}

执行此代码后secondArgument将包含y的值。上面的正则表达式假定您希望参数由单词字符组成(即小写和大写字母,数字和下划线)。

Java字符串文字语法需要双反斜杠,regexp引擎会看到单个反斜杠。

如果您想在大多数编程语言中允许字符串中的空格,您可以使用以下正则表达式:

Pattern p = Pattern.compile("executeRule\\(\\s*\\w+\\s*,\\s*(\\w+)\\s*,\\s*\\w+\\s*\\)");