构建模板引擎:正则匹配带/不带@endsection的@section代码段求助
解决模板引擎@section代码段匹配的正则问题
直接用这个正则表达式就能满足需求:
@section\((?:[^)]+)\)(?:\s*(?!@section)(?:.|\n)*?@endsection)?
正则说明:
@section\(:精准匹配@section的起始标识(?:[^)]+):捕获括号内的所有内容(直到右括号为止,不会跨段)\):匹配右括号,结束@section的声明部分(?:\s*(?!@section)(?:.|\n)*?@endsection)?:可选的内容块匹配,(?!@section)确保不会误匹配到下一个@section,非贪婪模式*?保证只抓取当前@section到对应的@endsection之间的内容
测试示例:
原始模板代码:
@section('title','Home page') @section('content') <h1>Home page<h1/> @endsection
匹配结果:
@section('title','Home page')- `@section('content') Home page
@endsection`
这个正则会自动区分两种@section:不带@endsection的会直接匹配到右括号结束(本身就是一行),带@endsection的会完整捕获从声明到闭合标签的所有内容,且不会出现嵌套匹配的问题。
内容的提问来源于stack exchange,提问作者Yahya Mallak
相关产品推荐
相关产品推荐

