正则表达式正确匹配组

问题描述:

我正在寻找解析自定义降价文本,如下面的例子。正则表达式正确匹配组

1 
Post:1 
Image:1|thumb 
Image:1|thumb|html classes here 
1|thumb|html classes here 

一般格式为:除冒号后的ID ModelName:ID|image_size|html classes

一切(:)是可选的。请注意,该ID也可以是一个字符串。最后一个管道后面可能有许多空间分隔的CSS类。这是我到目前为止有:

^([\w\.]+)?(?::([-\w\d\.]+))(?:\|(\w+))?(?:\|([-\w\s\d]+))?$ 

Regular expression visualization

Debuggex Demo

这个正则表达式有我无法弄清楚如何解决

  1. 冒号应的几个问题出现在合并为主的行之前,而不是之后。换句话说,只有组1出现时才需要冒号。 (同样的想法与管道(|。第3组前)和4
  2. 正则表达式不顶部匹配最后3测试用例1Post:1正确匹配

你可以做到这一点。与

(?:(\w+):)?(\d+)(?:[^|\n]*\|([^|\n]*)(?:\|(.*))?)? 

它会捕获第一标签在组1中,ID输入到第二组,图像尺寸成第三和类到第四。

首先,它ç标准标签(可选),然后是一个数字。接下来是一个也是可选的组,可以扫描|,然后捕获所有内容直到另一个|或行尾。如果发现|捕获所有行到行尾。

See it here at regex101

+0

谢谢,这绝对是朝着正确方向迈出的一步。不过,我还需要在一个组中捕获Image和Post。 – danielbker

+0

根据你的评论编辑:) – ClasG

+0

我编辑了你的原始正则表达式,并得到了相同的答案!谢谢你的帮助。你是一个正则表达式专家! – danielbker