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

Nat*_*lor 4 .net javascript regex

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

有效示例:

*| 401 | [2-10]

无效的示例:

*| 401 | [2-10] |

(pattern)对于回答我的具体问题,其价值是无关紧要的,但为了完整性,这里它的形式是:(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))\|){3}

编辑

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

Luc*_*ski 6

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

(?:pattern(?:\|(?!$)|$)){3}
Run Code Online (Sandbox Code Playgroud)

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

  • 要么\|(?!$):管道后面没有字符串的末尾
  • 或者$字符串的结尾

3次.


对于您的特定模式,这将是:

^(?:(?:((\*)|(\[[\w+ ]\-[\w+ ]\])|(\d+)))(?:\|(?!$)|$)){3}
Run Code Online (Sandbox Code Playgroud)

我也为模式添加了前缀^,因为只有当你匹配整个输入时,这个解决方案才有效.