正则零宽断言之双单标签混合解析
断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
正则表达式内容:
\{Tag:([a-zA-z0-9]*)\s([^}\/]*)\}(((?!\{\/Tag:)[\s\S])*?)\{/Tag:([a-zA-z0-9]*)\}
匹配字符串1:
{Tag:test param=”1″}test{/Tag:test}
和字符串2:
{Tag:test param=”1″}{Tag:test2 param=”2″/}{/Tag:test}
匹配字符串1非常简单,字符串2相对困难些,思考了一下午,看来只有零宽断言能解决,一时没体会到零宽断言的意思。
正则零宽断言部份:(((?!\{\/Tag:)[\s\S])*?)
中文说明::(((?!排除的字符)匹配所有表达式)无限次但尽可能少重复)
?! 是 负向零宽先行断言标志,(((?!\{\/Tag:)[\s\S])*?) 的意思是 断言匹配内容为{/Tag:外的所有内容,后跟\s\S括号*表示当断言为真时匹配所有内容。
分类: Java, JavaScript, PHP