我有一个正则表达式,用于匹配特定语法 n 次,每次出现后都有一个竖线(|),最后一次出现除外。目前,我的模式沿着(pattern)\|{3}
的行,但是这不满足没有尾随管道的要求。无论如何,我可以完成此而无需重复 (pattern)
?我能想到的最佳解决方案是(pattern)\|{2}(pattern)
。
有效示例:
* | 401 | [2-10]
无效示例:
* | 401 | [2-10] |
(pattern)
的价值与回答我的具体问题无关,但为了完整起见,此处的格式为当前形式:(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))\|){3}
修改的
这是在.NET和JavaScript中使用的。
答案 0 :(得分:5)
如果您匹配整个输入字符串,则有一个简单的解决方案:
(?:pattern(?:\|(?!$)|$)){3}
这意味着:匹配您的模式,然后是:
\|(?!$)
:管道不是后跟字符串的结尾$
字符串的结尾3次。
对于您的具体模式,这将是:
^(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))(?:\|(?!$)|$)){3}
我还使用^
为模式添加前缀,因为此解决方案仅在您匹配整个输入时才有效。