正则表达式模式结束子组
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。如果我在 'motif' 捕获组之后有一个问号,例如 ^VIR\sRECU\s(\d+)\nDE:\s(.*)(\nMOTIF:\s(.*))?
那么这个组是从未孤立
我想问题出在 (.*) 组,但不知道如何解决。
可能吗?或者我应该有 2 个不同的正则表达式,每个案例 1 个?
我在 php 上使用这些正则表达式和 preg_math() 函数。
我要的结果是998721687978
、Mrs PAUL SMITH
564
和ANY REASON
值
您可以使用
^VIR\s+RECU\s+(\d+)\nDE:\s+([\s\S]*?)(\nMOTIF:\s+(.*))?$
看到一个regex test #1 and a regex test #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+ 个字符,尽可能多
$
- 字符串结尾。
我可以有以下字符串: 案例 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。如果我在 'motif' 捕获组之后有一个问号,例如 ^VIR\sRECU\s(\d+)\nDE:\s(.*)(\nMOTIF:\s(.*))?
那么这个组是从未孤立
我想问题出在 (.*) 组,但不知道如何解决。
可能吗?或者我应该有 2 个不同的正则表达式,每个案例 1 个?
我在 php 上使用这些正则表达式和 preg_math() 函数。
我要的结果是998721687978
、Mrs PAUL SMITH
564
和ANY REASON
值
您可以使用
^VIR\s+RECU\s+(\d+)\nDE:\s+([\s\S]*?)(\nMOTIF:\s+(.*))?$
看到一个regex test #1 and a regex test #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+ 个字符,尽可能多
$
- 字符串结尾。