如何编写正则表达式以匹配以下模式

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));
     
  }

结果:

  1. !-23838|63883BC|9729-!
  2. !-8XX38|638,83BC|9729-!

!-8XX38|638\n83BC|9729-!被忽略

而不是正则表达式 (!-.?-!) 你可以使用类似 (!-[a-zA-Z0-9|,.?!]?-!)。采用 *?进行惰性匹配以获得 !-...-!

的最短范围