繁体   English   中英

正则表达式模式结束子组

[英]regex pattern ending sub group

我可以有以下字符串: 案例 1:

VIR RECU 998721687978
DE: Mrs PAUL SMITH
564
MOTIF: ANY REASON

或情况2:

VIR RECU 998721687978
DE: Mrs PAUL SMITH
564

字符串中可能会缺少“MOTIF:...”部分

我正在寻找一个正则表达式来隔离 2 个先例的子字符串。 到目前为止,我有: ^VIR\\sRECU\\s(\\d+)\\nDE:\\s(.*)(\\nMOTIF:\\s(.*))适用于案例 1 但不适用于案例 2。如果我在像^VIR\\sRECU\\s(\\d+)\\nDE:\\s(.*)(\\nMOTIF:\\s(.*))?这样的 'motif' 捕获组后面有一个问号^VIR\\sRECU\\s(\\d+)\\nDE:\\s(.*)(\\nMOTIF:\\s(.*))? 那么这个群体永远不会孤立

我想问题来自 (.*) 组,但无法弄清楚如何解决它。

是否可以 ? 或者我应该有 2 个不同的正则表达式,每个案例 1 个?

我在带有 preg_math() 函数的 php 上使用这些正则表达式。

我想要的结果是998721687978 , Mrs PAUL SMITH 564ANY REASON

您可以使用

^VIR\s+RECU\s+(\d+)\nDE:\s+([\s\S]*?)(\nMOTIF:\s+(.*))?$

查看正则表达式测试 #1正则表达式测试 #2

正则表达式详情

  • ^ - 字符串的开始
  • VIR\\s+RECU\\s+ - VIR ,1+ 个空格, RECU和 1+ 个空格
  • (\\d+) - 第 1 组:一位或多位数字
  • \\nDE: - 换行符和DE:子字符串
  • \\s+ - 1+ 个空格
  • ([\\s\\S]*?) - 第 2 组:任何 0+ 个字符,尽可能少
  • (\\nMOTIF:\\s+(.*))? - 一个可选的捕获组 #3:
    • \\nMOTIF: - 换行符和MOTIF:字符串
    • \\s+ - 1+ 个空格
    • (.*) - 第 4 组:除换行符以外的任何 0+ 个字符,尽可能多
  • $ - 字符串的结尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM