java匹配内部标记正则表达式
从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'
# 1 楼答案
我不认为你实际上首先需要逃避你的
<>
,我读过的任何文档都没有说你需要逃避there's some documentation here另外,
String.matches
方法只返回一个bool,告诉您的正则表达式是否包含在字符串中您可能需要使用matcher和pattern类,它们在At this web page中描述
下面是上述页面中的相关代码示例
而且,如果我不提醒您正则表达式不能真正解析xml,每个人都可能会跳到我身上
# 2 楼答案
我认为您只需要使用这个正则表达式(不要跳过尖括号):
然后使用捕获组1获取值
此外,如果您不希望值中有任何开口尖括号,我更喜欢这个正则表达式:
# 3 楼答案
尝试:
我已经删除了您不必要的转义,并允许前面和后面的字符
编辑:考虑换行符