我有一个字符串:
<RandomText>
executeRule(x, y, z)
<MoreRandomText>
我想要完成的是:如果更大的文本块中存在此executeRule
字符串,我想获得它的第二个参数。
我怎么能这样做?
答案 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*\\)");