从我在http响应中收到的以下字符串:
<res>
<resultCode>100</resultCode>
<resultText>OK</resultText>
<sessionId>60698PLA1354274623024</sessionId>
<sessionState>OPEN</sessionState>
</res>
我正在尝试使用java
提取sessionState(以及稍后的sessionId)我尝试过遵循正则表达式:
"object containing http response".matches("\<sessionState\>.*\</sessionState\>")
但我从未得到过匹配。我认为问题是我在多行中得到了http响应(我尝试添加\ n \ s但没有运气)。
感谢任何帮助,谢谢。
这是我使用推荐的正则表达式获得的输出:
DEBUG [1] ReplaceTags STEP for text: '"{=var.code}".matches("\\<sessionState \\>.*\\</sessionState\\>")' is: '"<res>\r\n <resultCode>100</resultCode>\r\n <resultText>OK</resultText>\r\n <sessionId>60698PLA1354274623024</sessionId>\r\n <sessionState>OPEN</sessionState>\r\n</res>'
DEBUG Executing code: "<res>\r\n <resultCode>100</resultCode>\r\n <resultText>OK</resultText>\r\n <sessionId>60698PLA1354274623024</sessionId>\r\n <sessionState>OPEN</sessionState>\r\n</res>".matches("\\<sessionState\\>.*\\</sessionState\\>")
DEBUG Compiling code:
public class EvalFunction105qhjmhjn3 {
public String eval() {
return "" + "<res>\r\n <resultCode>100</resultCode>\r\n <resultText>OK</resultText>\r\n <sessionId>60698PLA1354274623024</sessionId>\r\n <sessionState>OPEN</sessionState>\r\n</res>".matches("\\<sessionState\\>.*\\</sessionState\\>");
}
}
DEBUG Eval execution returned result: 'false'
答案 0 :(得分:0)
我认为你实际上并不需要首先逃离<>
,我读过的文档中没有你需要的文件。 there's some documentation here
此外,String.matches
方法只返回一个bool,告诉你的正则表达式是否包含在字符串中。
你可能想要使用匹配器和模式类,它们被描述为At this web page。
这是来自所述页面的相关代码示例。
package de.vogella.regex.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTestPatternMatcher {
public static final String EXAMPLE_TEST = "This is my small example string which I'm going to use for pattern matching.";
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\w+");
// In case you would like to ignore case sensitivity you could use this
// statement
// Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(EXAMPLE_TEST);
// Check all occurance
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
// Now create a new pattern and matcher to replace whitespace with tabs
Pattern replace = Pattern.compile("\\s+");
Matcher matcher2 = replace.matcher(EXAMPLE_TEST);
System.out.println(matcher2.replaceAll("\t"));
}
}
而且,如果我不提醒你正则表达式无法真正解析xml,那么每个人都可能会跳到我身上
答案 1 :(得分:0)
我认为你只需要使用这个正则表达式(不要逃避尖括号):
<sessionState>(.*)</sessionState>
然后使用捕获组1获取值。
另外,如果你不希望值中有任何开口尖括号,我更喜欢这个正则表达式:
<sessionState>([^<]*)</sessionState>
答案 2 :(得分:0)
尝试:
"HTTP response object".matches("[\\s\\S]*<sessionState>.*</sessionState>[\\s\\S]*");
我已删除了您不必要的转义,并允许使用前置和尾随字符。
编辑:考虑换行符