php Pattern匹配自定义标签

时间:2012-03-25 17:30:20

标签: php tags design-patterns match

我正在尝试将{{name:something}}等文件中的所有标记替换为某些特定值。 请注意,在{{name::something}}中只有一些东西可能会发出警告。与{{name:title}}{{name:content}}一样。那个“名字”永远都在那里。

反正 我使用了preg_match_all和preg_replace,一切都解决了。我找到了这个正则表达式的匹配项:$patmatch="/{{name:[a-zA-Z0-9._-]+}}/";

我的问题如下:

当像这样的标签与模式不匹配(它有语法错误)时,如{{notname:something}}{{name something}}{{ }}我必须抛出异常。 我如何知道标签是否存在,但语法错误?

我可以以某种方式进行另一种模式搜索,以检查它是否为标记(在{{}}之间),是否与{{name:something}}不一样?

任何帮助将不胜感激, 谢谢!

3 个答案:

答案 0 :(得分:1)

脱离我的头顶:

if(strpos($text, '{{name:') === false)
{
    //exception
}
else
{
    //properly formatted text
}

那样的东西?

答案 1 :(得分:1)

其他答案仅检查该标记是否在内容中,此标记检查真实有效性:

假设你有$ content变量来保存文件内容,你可以临时存储验证数据,如下所示:

$validation = preg_replace("/{{name:[a-zA-Z0-9._-]+}}/","",$content);

因此,您将有效剥离有效标签,现在您想查找无效标签,根据您想要的严格程度,您可以使用其中一个:

if(preg_match('/{{name:[^}]*}}/', $validation)) //found error tag
//alternatively you might want to check for typos like "nmae":
if(preg_match('/{{[^}]*}}/', $validation)) //found error tag

答案 2 :(得分:0)

也许您可以使用类似子模式,命名和检查结果