我正在尝试找出一种在每页上创建说明和关键字的方法。
标题是:
{{title=some page title in here}}
为了描述,我会做这样的事情:
{{description=some description per page in here}}
对于关键字元标记,我会这样做:
{{keywords=example keyword, per each page, this is an example}}
我如何使用preg_replace + regex解析来实现这一点,同时它也不会在页面上自动显示,而是放在实际的元信息中,例如:
<title> some page title in here </title>
<meta name="description" content="some description per page in here">
<meta name="keywords" content="example keyword, per each page, this is an example">
示例页面如下所示:
{{title=some page title in here}}
{{description=some description per page in here}}
{{keywords=example keyword, per each page, this is an example}}
<div id="content">
<h4> Some page title here </h4>
<p> Some page paragraphs here. </p>
</div> <!--#content-->
当然结果与此类似:
<html>
<head>
<title> Website Title - some page title in here </title>
<meta name="description" content="some description per page in here">
<meta name="keywords" content="example keyword, per each page, this is an example">
</head>
<body>
<div id="content">
<h4> Some page title here </h4>
<p> Some page paragraphs here. </p>
</div> <!--#content-->
</body>
</html>
非常感谢您的帮助。
答案 0 :(得分:0)
如果我正确阅读,你想要包括这样的内容:
<title><?php echo $page_title; ?></title>
之前在剧本中设置了页面标题
答案 1 :(得分:0)
您不需要regex
来执行此操作。将页面的元数据放在这样的数组中:
$meta["title"] = "Title";
$meta["description"] = "Description of the Page";
$meta["keywords"] = "Keywords, SEO";
以这种方式输出三个:
<title><?php echo $meta["title"]; ?></title>
<meta name="description" content="<?php echo $meta["description"]; ?>">
<meta name="keywords" content="<?php echo $meta["keywords"]; ?>">
答案 2 :(得分:0)
匹配任何给定的标签:
/(?<=\{\{TAG_NAME=).*?(?=\}\})/
匹配变量标签:
/\{\{(\w*?)=(.*?)\}\}/
然后,第一个子匹配将为您提供标签名称,第二个子匹配将为您提供值。考虑空白:
/\{\{\s*(\w*?)\s*=\s*(.*?)\s*\}\}/
...只要没有人在标签中使用'}}'。
分解:
\{\{
匹配两个开括号。简单。 (它们必须被转义,因为{是正则表达式中的特殊字符。
\s*
贪婪地匹配尽可能多的空白区域。
(\w*?)
匹配不会破坏正则表达式的最短字符串(a-zA-Z0-9和下划线)。括号返回匹配的东西作为子匹配。
\s*=\s*
只用一个等号
来吞噬更多的空格(.*?)
匹配不会破坏正则表达式的任何字符的最短集合,并将其作为第二个子匹配返回。
\s*\}\}
吞噬最后一个空白区域和关闭大括号(再次,逃脱)。
所以,如果你这样做:
$regex = '/\{\{\s*(\w*?)\s*=\s*(.*?)\s*\}\}/'
preg_match_all($regex, $html, $matches)
$html = preg_replace($regex, '', $html)
然后$matches[1]
包含您的所有标记名称,$matches[2]
包含所有值,而$html
包含您剩余的所有HTML