最近的项目用到了文件模板和输入占位符,想要在模板文件中插入给用户输入的占位符;每次修改模板中的输入占位符都是control+F进行搜索,很费眼,而且效率低容易出错;所以希望用正则的方式,匹配出模板中的占位符;
模板中的占位符前后有固定的字符串格式
<!--{$field_name}-->
而且我只想截取里面的field_name,所以用到了零宽断言,这里记录一下:
零宽断言
用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧: 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
-
(?=exp) 也叫零宽度正预测先行断言 它断言自身出现的位置的后面能匹配表达式exp。比如\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。
-
(?<=exp) 也叫零宽度正回顾后发断言 它断言自身出现的位置的前面能匹配表达式exp。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。
最后,归回到我项目中的需求,这两种断言要一起使用才能满足我的需求:
字段占位符规则:<!--{$field_name}-->
匹配字段的正则表达式:(?<=<!--{\$)(.*?)(?=}–>)
说明:
(?<=<!--{\$) 匹配前面filed_name前面的占位符 <!--{$
(?=}–>) 匹配filed_name后面的占位符 }-->
更多关于正则表达式的内容,请移步 ↓
https://deerchao.net/tutorials/regex/regex.htm
网友评论