我正在尝试匹配[abc],除非它被[]从两端“转义”(因此[[abc]]被认为是转义的,而不是[[abc]或[abc]])。
我能找到的最接近的是来自Match "ABC" from *ABC*, but not from **ABC**的(?<!\[)\[abc\](?!\]),但是如果它只从一侧转义,它会忽略match。
发布于 2021-08-26 01:16:37
@Thefourthbird的答案是有效的,但需要重复主模式abc,这与鼓励大多数人遵循的DRY principle背道而驰。
为了最大限度地实现代码重用,一种方法是使用捕获组来捕获[abc],然后在负向回溯模式中使用它,以确保它前面不会同时有[,后面不会同时跟]
(\[abc])(?<!\[\1(?=]))Demo
请注意,这适用于C#,因为.NET恰好支持可变长度的后视模式,而许多其他正则表达式引擎都不支持这种模式。
发布于 2021-08-25 08:48:10
前视可以在左边,也可以在右边,以允许在左边或右边有一个单括号,但不允许在另一边有一个双方括号。
(?<!\[)\[abc]|\[abc](?!])Regex demo
https://stackoverflow.com/questions/68919615
复制相似问题