如何编写正则表达式以匹配以下模式
How do I write regular expression to match the below pattern
模式:(任何特殊字符、换行符、空格、字母和数字)[!-(任何特殊字符、字母和数字)-!](任何特殊字符,新行,空格,字母和数字)
示例:
!|这是第一行|
|abc|62883HJKS,JSK|56.23|28378|!-23838.37|63883BC|9729-!|
需要匹配所有子串,如!-23838.37|63883BC|9729-!
它可以像这样工作
final String regex = "(!-.*?-!)";
Matcher m = Pattern.compile(regex)
.matcher(
"|abc|6288\n3HJKS,JSK|28378|!-23838|63883BC|9729-!|abc|62883HJKS,JSK|28378|!-8XX38|638,83BC|9729-!|abc|62883HJKS,JSK|28378|!-8XX38|638\n83BC|9729-!|");
while (m.find()) {
System.out.println(m.group(1));
}
结果:
- !-23838|63883BC|9729-!
- !-8XX38|638,83BC|9729-!
!-8XX38|638\n83BC|9729-!被忽略
而不是正则表达式 (!-.?-!) 你可以使用类似 (!-[a-zA-Z0-9|,.?!]?-!)。采用 *?进行惰性匹配以获得 !-...-!
的最短范围
模式:(任何特殊字符、换行符、空格、字母和数字)[!-(任何特殊字符、字母和数字)-!](任何特殊字符,新行,空格,字母和数字)
示例: !|这是第一行|
|abc|62883HJKS,JSK|56.23|28378|!-23838.37|63883BC|9729-!|
需要匹配所有子串,如!-23838.37|63883BC|9729-!
它可以像这样工作
final String regex = "(!-.*?-!)";
Matcher m = Pattern.compile(regex)
.matcher(
"|abc|6288\n3HJKS,JSK|28378|!-23838|63883BC|9729-!|abc|62883HJKS,JSK|28378|!-8XX38|638,83BC|9729-!|abc|62883HJKS,JSK|28378|!-8XX38|638\n83BC|9729-!|");
while (m.find()) {
System.out.println(m.group(1));
}
结果:
- !-23838|63883BC|9729-!
- !-8XX38|638,83BC|9729-!
!-8XX38|638\n83BC|9729-!被忽略
而不是正则表达式 (!-.?-!) 你可以使用类似 (!-[a-zA-Z0-9|,.?!]?-!)。采用 *?进行惰性匹配以获得 !-...-!
的最短范围