如何使用正则表达式查找包含西里尔字符的特定模板字符串
正则匹配西里尔字符片段修正方案
你的原正则存在3个核心问题:
- 你写的
{Cyrillic}是占位符,不是正则支持的西里尔字符匹配语法 - 没有开启Unicode匹配模式,PHP的preg函数默认无法识别多字节的西里尔字符
- 没有适配
if、变量、判断符之间的可变空格,容易因为空格数量不匹配失败
修正后的代码
如果只需要判断是否存在匹配,用preg_match:
preg_match("/{%\s*if\s+[\p{Cyrillic}_]+\s*!=\s*''\s*%}/iu", $features, $match);
如果需要提取所有符合规则的片段,改用preg_match_all:
preg_match_all("/{%\s*if\s+[\p{Cyrillic}_]+\s*!=\s*''\s*%}/iu", $features, $matches);
规则说明
\p{Cyrillic}是PCRE正则内置的Unicode属性,匹配所有西里尔字符[\p{Cyrillic}_]+匹配由西里尔字符、下划线组成的变量名,如果你变量里还包含数字,可以改成[\p{Cyrillic}0-9_]+\s*匹配0个或多个空白字符,适配标签内可能存在的多余空格、换行- 末尾的
u修饰符强制开启Unicode模式,是识别西里尔字符的必要配置;i修饰符保留你原来的忽略大小写需求
内容的提问来源于stack exchange,提问作者Toma Tomov
相关产品推荐
相关产品推荐

