正则表达式:重复模式n次,最终重复的变化

时间:2014-12-19 00:59:09

标签: javascript .net regex

我有一个正则表达式,用于匹配特定语法 n 次,每次出现后都有一个竖线(|),最后一次出现除外。目前,我的模式沿着(pattern)\|{3}的行,但是这不满足没有尾随管道的要求。无论如何,我可以完成此而无需重复 (pattern)?我能想到的最佳解决方案是(pattern)\|{2}(pattern)

有效示例:

  

* | 401 | [2-10]

无效示例:

  

* | 401 | [2-10] |

(pattern)的价值与回答我的具体问题无关,但为了完整起见,此处的格式为当前形式:(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))\|){3}

修改

这是在.NET和JavaScript中使用的。

1 个答案:

答案 0 :(得分:5)

如果您匹配整个输入字符串,则有一个简单的解决方案:

(?:pattern(?:\|(?!$)|$)){3}

这意味着:匹配您的模式,然后是:

  • \|(?!$):管道不是后跟字符串的结尾
  • $字符串的结尾

3次。


对于您的具体模式,这将是:

^(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))(?:\|(?!$)|$)){3}

我还使用^为模式添加前缀,因为此解决方案仅在您匹配整个输入时才有效。