2014-01-12 28 views
0

谁能帮我解决一个正则表达式的问题?JAVA在抱怨正则表达式模式中的JMeter BeanShell的采样

所以,我检查通过在JMeter的BeanShell中断言的SSH控制台输出。输出看起来是这样的:

field1: value1 
field2: value2 
... 
fieldN: valueN 

我使用变量来定义的预期值,比如:

fieldNames = "field1|field2|field3"; 
fieldValues = "value1,value2,value3"; 

的BeanShell断言代码是这样的:

import java.util.regex.*; 

Failure = false; 
FailureMessage = "failed"; 

String[] fieldNames = {}; 
String[] fieldValues = {}; 
String resp = SampleResult.getResponseDataAsString(); 

fieldNames = "${lFieldNames}".split("|"); 
fieldValues = "${lExpectedValues}".split(","); 
int fieldNumber = -1; 

for (int i = 0; i < fieldNames.length; i++) 
{ 
    Pattern pattern = Pattern.compile(fieldNames[i] + "\\W\\s(\\d+|\\w+)"); 
    Matcher matcher = pattern.matcher(resp); 
} 

每次我得到这样的响应:

Assertion error: true 
Assertion failure: false 
Assertion failure message: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``import java.util.regex.*; Failure = false; FailureMessage = "failed"; String[] . . . '' Token Parsing Error: Lexical error at line 16, column 62. Encountered: "W" (87), after : "\"(\\" 

我在Perl中检查了这个正则表达式,并在使用egrep的Linux控制台中检查了它 - 它工作正常。所以我真的不明白Java在这里不喜欢什么。

我将是解决此问题的任何帮助,非常感谢。

+0

什么是'的System.out.println输出(FIELDNAMES [I] + “\\ W \\ S(\\ d + | \\ W +)”);' – thefourtheye

+0

它仅仅是相同的:第17行第46列出现词汇错误。遇到:“W”(87),在:“\”\\“ – user3186902

回答

0

我认为某件事情是错误的变量fieldNames[i]

试试这个代码,而不是用于查看内置模式。

for (int i = 0; i < fieldNames.length; i++) 
{ 
    String tmp = fieldNames[i] + "\\W\\s(\\d+|\\w+)"; 
    System.out.println(">> " +tmp); 
    Pattern pattern = Pattern.compile(tmp); 
    Matcher matcher = pattern.matcher(resp); 
}