Java 正则表达式内部标记匹配
从http响应中接收到的以下字符串:Java 正则表达式内部标记匹配,java,regex,Java,Regex,从http响应中接收到的以下字符串: <res> <resultCode>100</resultCode> <resultText>OK</resultText> <sessionId>60698PLA1354274623024</sessionId> <sessionState>OPEN</sessionState> </res> 100
<res>
<resultCode>100</resultCode>
<resultText>OK</resultText>
<sessionId>60698PLA1354274623024</sessionId>
<sessionState>OPEN</sessionState>
</res>
100
好啊
606981354274623024
打开
我正在尝试使用java提取sessionState(以及稍后的sessionId)
我尝试了以下正则表达式:
"object containing http response".matches("\<sessionState\>.*\</sessionState\>")
“包含http响应的对象”。匹配(\.\)
但我从来没有找到匹配的。我认为问题在于我在多行中得到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'
DEBUG[1]文本的ReplaceTags步骤:“{=var.code}”。匹配项(\\.\\”)是:“\r\n 100\r\n确定\r\n 60698PLA1354274623024\r\n打开\r\n”
调试执行代码:“\r\n 100\r\n确定\r\n 60698PLA1354274623024\r\n打开\r\n”。匹配(\\.\\”)
调试编译代码:
公共类EvalFunction105qhjmhjn3{
公共字符串eval(){
返回“+”\r\n 100\r\n确定\r\n 60698PLA1354274623024\r\n打开\r\n”。匹配项(\\.\\”;
}
}
调试评估执行返回结果:“false”
首先,我不认为你真的需要逃避你的
,我读过的任何文档都没有说你需要逃避
另外,
String.matches
方法只返回一个bool,告诉您的正则表达式是否包含在字符串中
您可能需要使用matcher和pattern类,这两个类已经描述过了
下面是上述页面中的相关代码示例
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获取值
此外,如果您不希望值中有任何开口尖括号,我更喜欢这个正则表达式:
<sessionState>([^<]*)</sessionState>
([^试试:
“HTTP响应对象”。匹配(“[\\s\\s]*.[\\s]*”;
我已经删除了您不必要的转义,并允许前面和后面的字符
编辑:为了解释换行符为什么要转义<和>。您不需要。使用xml解析器
…不regex
…同意。这更难,但它工作正常。regex似乎只在简单的xml上工作。抱歉。在这种情况下,我被迫使用regex,因为我使用的是特定的java工具。我尝试了以下方法ing regex:\\.\\但是运气不好。也尝试过([^@user1866757如果你能保证你的XML不会向你扔曲线球,那么regex可以满足要求。只是不要告诉别人我告诉过你的。好吧,当你运行“包含http响应的对象”。匹配(\.\\”)
将返回一个布尔值。您认为该布尔值是真的还是假的?“此外,String.matches方法只返回一个布尔值,告诉您的正则表达式是否包含在字符串中。”我知道这一点,这就是为什么该方法后面跟着:“{=var.result}”。replaceAll(\”,“”)。replaceAll(\”,“”)@user1866757请在不转义括号的情况下进行尝试,如“包含http响应的对象”。匹配项(“.”)
<sessionState>([^<]*)</sessionState>
"HTTP response object".matches("[\\s\\S]*<sessionState>.*</sessionState>[\\s\\S]*");