我正在寻找一个正则表达式来提取[
和]
之间可能包含转义字符的内容。以下是一些例子。
+------------------+----------------+
| Input | Output |
+------------------+----------------+
| [B] | B |
| [B][C][D] | B |
| [hello\t\tworld] | hello\t\tworld |
| [hello\n\nworld] | hello\n\nworld |
| [\\]] | \\] |
| [\\\\] | \\\\ |
| [x[y\\]z][foo] | x[y\\]z |
+------------------+----------------+
对于像[B][C][D]
这样的字符串,返回最小的匹配是可以的,因为所需的模式p
将被迭代匹配为p+
。这看起来像是一个否定的正向后看,但我不知道是否存在这样的事情(即,消费,直到你看到一个]
之前没有一个或多个\\
)。
3条答案
按热度按时间x7yiwoj41#
您需要的正则表达式基本上与this one相同。
试试on regex101.com。
iqih9akk2#
下面是一个相对较短的模式,它避免了使用交替:
\[(.+?)(?<!(?<!\\)\\{2})\]
https://regex101.com/r/nUu2tr/1
编辑:
为了完整起见,从评论中复制。
此模式中的嵌套负向后查找操作于最后的
\]
,它是字符串文字]
。块的外部指定如果匹配的]
前面有两个反斜杠\
,则不应该匹配。内部部分指定,如果这两个反斜杠前面有另一个反斜杠,则不应应用此规则。hzbexzde3#
您可以使用以下内容。
我不确定如何处理 [\] 条件,所以我只是添加了它作为一个合理的匹配。
输出量