下面的模式使用什么符号进行编译

时间:2019-03-14 11:47:19

标签: java

数据:<emp_dist_nm>Shyam lal/tester</emp_dist_nm>

我尝试过的代码是

Pattern p3 = Pattern.compile("<emp_dist_nm>(\\S+)</emp_dist_nm>");

该模式无法编译,请提示我需要使用的确切符号,以便我的模式可以编译

1 个答案:

答案 0 :(得分:3)

模式可以编译,只是与字符串不匹配。您正在寻找\S+,但与名称中的空格不匹配。相反,您可以例如尝试“ <以外的所有内容”,即[^<]+

Pattern p3 = Pattern.compile("<emp_dist_nm>([^<]+)</emp_dist_nm>");

实际上,由于您已经在要捕获的组之后添加了结束标签,因此您也可以只使用.+?,即,一个非贪心的 any 字符组。这里,非贪婪的?很重要,否则它将合并两个这样的标记的内容以及它们之间的所有内容。

Pattern p3 = Pattern.compile("<emp_dist_nm>(.+?)</emp_dist_nm>");

如果您还希望允许使用空标签,请使用*而不是+,即[^<]*.*?