(?i)(?-i) 不区分大小写
(?:) 分组
(?<=) 间隙前方允许的
(?<!) 间隙前方不允许的
(?=) 间隙后方允许的
(?!) 间隙后方不允许的
[^] 注意小尖号在大括号里面表示不允许出现的
^ 表示开始
$ 结束
.*? 以最小匹配
----!java
平衡:
(java(c++)
<[^<>]*(((?'Open'<)[^<>]*)+((?'-Open'>)[^<>]*)+)*(?(Open)(?!))>
< #最外层的左括号
[^<>]* #最外层的左括号后面的不是括号的内容
(
(
(?'Open'<) #碰到了左括号,在黑板上写一个"Open"
[^<>]* #匹配左括号后面的不是括号的内容
)+
(
(?'-Open'>) #碰到了右括号,擦掉一个"Open"
[^<>]* #匹配右括号后面不是括号的内容
)+
)*
(?(Open)(?!)) #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败
> #最外层的右括号