正则表达式多行匹配字符串后跟文本与

时间:2017-01-05 23:30:23

标签: regex

想知道是否有任何正则表达式大师可以帮助弄清楚如何创建一个正则表达式来解决这个问题。我很难过。

我需要在此多行文字的变体上匹配“CUST-X”..

"CUST-1 Some message\nLock-Id: Id74248cd199\n"

要求:

  1. “CUST-1”和“Some message”可以用冒号(:)分隔。该 冒号是可选的。
  2. 之间可以没有,一个或多个空格 这两个字符串。
  3. 任何数量的空格都可以在“CUST-1”前面。
  4. “CUST-1”之后需要留言。信息是 任意的,消息没有模式。
  5. 在第一个之后忽略任何其他CUST-XX。只在第一次出现时匹配。
  6. 最好使用java正则表达式。
  7. 示例:

    测试应与“CUST-1”匹配的字符串

    "CUST-1 Some message\nLock-Id: Id14248cd199"
    "  CUST-1 another message\nLock-Id: Id14258cd199"
    "CUST-1:I like apples\nLock-Id: Id84248cd199"
    "CUST-1: peaches are sweet\nLock-Id: Id78248cd199"
    "CUST-1:    pies are great\nLock-Id: Id71248cd199"
    

    应匹配“CUST-X”而不是“CUST-X”

    "CUST-1: Nice message about CUST-2\nLock-Id: Id74248cd199\n"
    

    测试不匹配“CUST-1”的字符串

    "CUST-1\nLock-Id: Id78248cd199"
    "CUST-1  \nLock-Id: Id74248cd199"
    "CUST-1:\nLock-Id: Id84248cd199"
    "CUST-1:  \nLock-Id: Id94248cd199"
    

    我想出的关闭是......

    ^\\s*([A-Z]+-[0-9]+):?\\s+\\S+
    

    但这也符合我不希望匹配发生的情况。

1 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西:

^\\s*([A-Z]+-[0-9]+):?\\p{Z}+\\S+

\s匹配定义为[\t\n\f\r\p{Z}]的任何空白字符,其中包含\n

\p{Z}仅指空白字符本身。