我正在尝试匹配[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
复制相似问题