我有这样的文字:
[UNIX; common>要扩展通配名称中的特殊字符,或 这样做的行为(该行动也称为[[b; #fff;] globbing])。 文件名通配符的Unix约定已经足够了 普遍存在许多黑客用书面英语使用其中一些, 特别是关于技术主题的电子邮件或新闻。那些通常 遇到的包括以下内容:一些例子:[[i ;;]他说他的 名字是[KC] arl](表达歧义)。 [[i ;;]我不读 talk.politics。*](任何talk.politics子组 [[蒲式耳; #FFF ;;行话]的Usenet])。其他例子在条目下给出 for [[bu; #fff ;; jargon] X]。请注意,glob模式类似,但不是 与[[bu; #fff ;; jargon] regexp] s.Historical中使用的相同 注意:术语用法来自glob,子程序的名称 在古老的Bourne版本的Unix中扩展了通配符 外壳
我希望将[KC]
和[Unix; common]
替换为\[KC\]
和\[Unix; common\]
我试过这个正则表达式:
/\[(?![^;]*;[^;]*;[^\]]*\])[^\]]+\]/g
但它不起作用。
答案 0 :(得分:2)
只是一个小小的变化。您还需要在否定的char类中包含\]
和;
,因为[^;]
也应该与]
匹配,因此它应该超过结束括号]
。
\[((?![^;\]]*;[^;\]]*;[^\]]*\])[^\]]+)\]