这有点元,但我试图找出一个正则表达式来匹配正则表达式以用于语法突出显示。有一个很长的背景故事,但为了简洁起见,我将跳过它。这就是我想要做的:我需要匹配一个注释(#
在行尾之前并在行尾终止)只有当它不在字符类([...]
)内时才需要匹配,尽管如果有一个完整的(已关闭)行中较早的字符类。
[
复杂的因素是转义方括号 - 而行中前面没有后跟关闭的纯文本]
表示我们仍在字符类中,因此是非法的,\[
可能存在转义括号,无论是否存在关闭转义括号\]
。
也许一些例子会有所帮助。以下是一些应匹配注释的情况:
(\h{8}-\h{4}-\h{4}-\h{4}-\h{12}) # match UUID
(根本没有方括号)([A-Za-z_][A-Za-z0-9_]*) # valid Python identifier
(成对的非转义方括号)(\||\[|\?) # match some stuff
(转义的左方括号)
以下是不应匹配“尝试的评论”的示例:
[A-Za-z # letters
0-9_-.] # numbers and other characters
(第一行不应该匹配,第二行就可以了)
我绝不是一个正则表达式大师(这就是我问这个问题的原因!),但我尝试过摆弄正面和负面的lookbehinds,并尝试嵌套它们,但我的运气为零,除了
(?<!\[)((#+).*$)
仅当前面没有方括号时才匹配注释。但是,一旦我开始嵌套环视,并尝试匹配开瓶器之前是否有转义,我就被难住了。任何帮助都会......有帮助。