RegExp匹配PHP

时间:2017-01-17 04:03:32

标签: php regex match regex-group

数据:

N15319542045C13_1_3/61488007C13-130083_1_3/61488007C13-130083-1_1_3/P1197443641_1_3SD|1
NP1196939393_1_3SU|OD=2/7;|BNP1196939393_1_3SU|OD=2/7;|BNP1196930222_1_3SU|OD=4/11;|
NP1196930222_1_3SU|OD=4/11;|
N15319384625C13_1_3/61445794C13-130077_1_3SD||BN15319384625C13_1_3/61445794C13-130077_1_3SD||

正则表达式:

(N(.*?)S([UID])\|(.*?))(?:B|\|.?$)

我试图使用上面的正则表达式找到7个匹配,但只有6匹配。不知道如何修复以匹配第一行。

格式:

N(key)S(action)|(value or end)

结束取决于不同的比赛

如果有其他人需要我解决了它:

(\x15(.*?)\x01([UID])\|(.*?))(?:.*?\x08|.*\|?$)

1 个答案:

答案 0 :(得分:1)

正则表达式不起作用,因为根据正则表达式在S[UID]期望2 |后,但在第一个输入字符串中只有一个。

一个解决方法是使第二组可选,并移出字符串结束锚$

(N(.*?)S([UID])\|(.*?))(?:B|\|.?)?$

<强> Regex Demo

<小时/> 或者可能更简单,如

N.*?S[UID]\|.*$

<强> Regex Demo