Home Backend Development PHP Tutorial php下正则来匹配dede模板标签的代码_php技巧

php下正则来匹配dede模板标签的代码_php技巧

May 17, 2016 am 09:23 AM
regular

html代码

复制代码 代码如下:








{t:arc row='10'}
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{/t:list}{t:field.title/}
{/t:list}{t:field.title/}
{/t:arc}
{T:channelartlist
row='6'
}

{t:field name='typename'/}{t:field.typename/}


{t:arclist titlelen='42' row='10'}

  • [field:title/]

  • ([field:sendtime function="MyDate('m-d',@me)"/])


{/t:arclist}
{/t:channelartlist
}
{t:global.cfg_title
/}{t:var.cfg_title/}{t:global.cfg_webname /}{t:global.cfg_title/}{t:var.cfg_title/}
{t:field.title function="Html2Text(@me)"/}
{t:include
filename="header.htm"/}
{t:include filename="header.htm"
/}
{t:field.title function='Html2Text(@me)' }{/t:field
}
{t:array name='asdas' }{/t:array
}
{t:channel typeid='1' row='15'}
[field:id/][field:typename/]
{/t:channel
}
{t:channel typeid='1'} [field:id/] [field:typename/]{/t:channel}
{t:channel typeid='1' }[field:id/]
[field:typename/]{/t:channel
}sd
{t:channel}[field:typename/]{/t:channel
}
{t:channel typeid='1' row='20' }[field:userid/]
[field:scores/]
{/t:channel
}



php代码
复制代码 代码如下:

$str = file_get_contents("test.htm");
$skstr="{";
$skdstr="t:";
$sdstr="}";
//$reg="/{t:.*?(?:\/).*?}/si";//此无法匹配嵌套,只能一层 si s: 使前面的. 包括换行符 i:不区分大小写
//$reg="/({t:*[^{]*\/}|{t:*[^}]*}([^{]|(?R))*{\/t:.*?})/si";无限嵌套都可截取.
$reg='/('.$skstr.$skdstr.'*[^'.$skstr.']*\/'.$sdstr.'|'.$skstr.$skdstr.'*[^'.$sdstr.']*'.$sdstr.'([^'.$skstr.']|(?R))*'.$skstr.'\/'.$skdstr.'.*?'.$sdstr.')/si';
preg_match_all($reg,$str,$m);
/*echo "
";print_r($m[0]);echo "
Copy after login
";exit();*/
$CTags=array();
$glarr1=array($skstr.$skdstr=>'');//array('{t:'=>'');前缀
$glarr2=array('"'=>'','\''=>'','$'=>'','/'=>'');
/*
{t:array typeid='1'}[field:typename/]{/t:array}
{t:global.title function="html2text(@me)"/}
*/
foreach($m[0] as $k=>$v){
$rarr=array();
$rarr['str']=$v; //原模板字符串
$vs=explode('}',$v); //分割取得第一部分 {t:array typeid='1'
$va=explode(' ',$vs[0]); //分割属性 " {t:array " , " typeid='1' "
$vb=explode('.',$va[0]); //分割标签名和字段名 {t:global.title
$rarr['tagname']=trim(strtr(strtolower($vb[0]),$glarr1));//过滤前缀{t: 取得标签名 array 或 golbal
$rarr['tagfield']=strtr($vb[1],$glarr2); //取得字段名 title
unset($vs[0]);$vsstr=implode('}',$vs); //去掉前缀,返回后半段: [field:typename/]{/t:array}
$rarr['text']=preg_replace("/".$skstr."\/".$skdstr.$rarr['tagname']."(.*?)".$sdstr."/si",'',$vsstr);
/*过滤后缀 {/t:array} 取得中间文本.
可能出现,空格或者换行所以使用正则,也可直接使用strtr 替换 。
{/t:array }
{/t:array
}
strtr(strtolower($vsstr),array($skstr.'/'.$skdstr.$rarr['tagname'].$sdstr=>''));
*/
unset($va[0]);
$attr=array();
foreach($va as $val){//循环记录属性
$val=strtr($val,$glarr2); //typeid='1' 去掉 " ' / , typeid=1
$vc=explode('=',$val);
if(!empty($vc[0])){
$vc[0]=strtolower($vc[0]); //小写属性名
if($vc[0]=="function"){
$rarr['function']=$vc[1]; //返回要执行的 html2text(@me)
}else if($vc[0]=="name"){
$rarr['tagfield']=$vc[1]; //{t:field name='title' /}
}else{
$attr[trim($vc[0])]=$vc[1]; //属性 $attr['typeid']=1;
}
}
}
$rarr['attr']=$attr;
$CTags[$k]=$rarr;
}
echo "
"; <br>print_r($CTags); <br>echo "
Copy after login
";
?>

输出内容:
复制代码 代码如下:

Array
(
[0] => Array
(
[str] => {t:arc row='10'}
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{/t:list}{t:field.title/}
{/t:list}{t:field.title/}
{/t:arc}
[tagname] => arc
[tagfield] =>
[text] =>
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{t:list row='5'}
{t:field.title/}
{/t:list}{t:field.title/}
{/t:list}{t:field.title/}
[attr] => Array
(
[row] => 10
)
)
[1] => Array
(
[str] => {T:channelartlist
row='6'
}
{t:field name='typename'/}{t:field.typename/}
{t:arclist titlelen='42' row='10'}
[field:title/]
([field:sendtime function="MyDate('m-d',@me)"/])
{/t:arclist}
{/t:channelartlist
}
[tagname] => channelartlist
[tagfield] =>
[text] =>
{t:field name='typename'/}{t:field.typename/}
{t:arclist titlelen='42' row='10'}
[field:title/]
([field:sendtime function="MyDate('m-d',@me)"/])
{/t:arclist}
[attr] => Array
(
[row] => 6
)
)
[2] => Array
(
[str] => {t:global.cfg_title
/}
[tagname] => global
[tagfield] => cfg_title
[text] =>
[attr] => Array
(
)
)
[3] => Array
(
[str] => {t:var.cfg_title/}
[tagname] => var
[tagfield] => cfg_title
[text] =>
[attr] => Array
(
)
)
[4] => Array
(
[str] => {t:global.cfg_webname /}
[tagname] => global
[tagfield] => cfg_webname
[text] =>
[attr] => Array
(
)
)
[5] => Array
(
[str] => {t:global.cfg_title/}
[tagname] => global
[tagfield] => cfg_title
[text] =>
[attr] => Array
(
)
)
[6] => Array
(
[str] => {t:var.cfg_title/}
[tagname] => var
[tagfield] => cfg_title
[text] =>
[attr] => Array
(
)
)
[7] => Array
(
[str] => {t:field.title function="Html2Text(@me)"/}
[tagname] => field
[tagfield] => title
[text] =>
[function] => Html2Text(@me)
[attr] => Array
(
)
)
[8] => Array
(
[str] => {t:include
filename="header.htm"/}
[tagname] => include
[tagfield] =>
[text] =>
[attr] => Array
(
[filename] => header.htm
)
)
[9] => Array
(
[str] => {t:include filename="header.htm"
/}
[tagname] => include
[tagfield] =>
[text] =>
[attr] => Array
(
[filename] => header.htm
)
)
[10] => Array
(
[str] => {t:field.title function='Html2Text(@me)' }{/t:field
}
[tagname] => field
[tagfield] => title
[text] =>
[function] => Html2Text(@me)
[attr] => Array
(
)
)
[11] => Array
(
[str] => {t:array name='asdas' }{/t:array
}
[tagname] => array
[tagfield] => asdas
[text] =>
[attr] => Array
(
)
)
[12] => Array
(
[str] => {t:channel typeid='1' row='15'}
[field:id/][field:typename/]
{/t:channel
}
[tagname] => channel
[tagfield] =>
[text] =>
[field:id/][field:typename/]
[attr] => Array
(
[typeid] => 1
[row] => 15
)
)
[13] => Array
(
[str] => {t:channel typeid='1'} [field:id/] [field:typename/]{/t:channel}
[tagname] => channel
[tagfield] =>
[text] => [field:id/] [field:typename/]
[attr] => Array
(
[typeid] => 1
)
)
[14] => Array
(
[str] => {t:channel typeid='1' }[field:id/]
[field:typename/]{/t:channel
}
[tagname] => channel
[tagfield] =>
[text] => [field:id/]
[field:typename/]
[attr] => Array
(
[typeid] => 1
)
)
[15] => Array
(
[str] => {t:channel}[field:typename/]{/t:channel
}
[tagname] => channel
[tagfield] =>
[text] => [field:typename/]
[attr] => Array
(
)
)
[16] => Array
(
[str] => {t:channel typeid='1' row='20' }[field:userid/]
[field:scores/]
{/t:channel
}
[tagname] => channel
[tagfield] =>
[text] => [field:userid/]
[field:scores/]
[attr] => Array
(
[typeid] => 1
[row] => 20
)
)
)

测试代码打包下载
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to match multiple words or strings using Golang regular expression? How to match multiple words or strings using Golang regular expression? May 31, 2024 am 10:32 AM

Golang regular expressions use the pipe character | to match multiple words or strings, separating each option as a logical OR expression. For example: matches "fox" or "dog": fox|dog matches "quick", "brown" or "lazy": (quick|brown|lazy) matches "Go", "Python" or "Java": Go|Python |Java matches words or 4-digit zip codes: ([a-zA

How to replace a string starting with something with php regular expression How to replace a string starting with something with php regular expression Mar 24, 2023 pm 02:57 PM

PHP regular expressions are a powerful tool for text processing and conversion. It can effectively manage text information by parsing text content and replacing or intercepting it according to specific patterns. Among them, a common application of regular expressions is to replace strings starting with specific characters. We will explain this as follows

How to use regular expressions to remove Chinese characters in php How to use regular expressions to remove Chinese characters in php Mar 03, 2023 am 10:12 AM

How to remove Chinese in PHP using regular expressions: 1. Create a PHP sample file; 2. Define a string containing Chinese and English; 3. Use "preg_replace('/([\x80-\xff]*)/i', '',$a);" The regular method can remove Chinese characters from the query results.

How to use regular matching to remove html tags in php How to use regular matching to remove html tags in php Mar 21, 2023 pm 05:17 PM

In this article, we will learn how to remove HTML tags and extract plain text content from HTML strings using PHP regular expressions. To demonstrate how to remove HTML tags, let's first define a string containing HTML tags.

How to verify if a URL is HTTPS protocol using PHP regex How to verify if a URL is HTTPS protocol using PHP regex Jun 24, 2023 am 08:16 AM

Website security has attracted more and more attention, and using the HTTPS protocol to ensure the security of data transmission has become an important part of current website development. In PHP development, how to use regular expressions to verify whether the URL is HTTPS protocol? here we come to find out. Regular expression Regular expression is an expression used to describe rules. It is a powerful tool for processing text and is widely used in text matching, search and replacement. In PHP development, we can use regular expressions to match http in the URL

Sharing tips on using PHP regular expressions to implement Chinese replacement function Sharing tips on using PHP regular expressions to implement Chinese replacement function Mar 24, 2024 pm 05:57 PM

Sharing tips on using PHP regular expressions to implement the Chinese replacement function. In web development, we often encounter situations where Chinese content needs to be replaced. As a popular server-side scripting language, PHP provides powerful regular expression functions, which can easily realize Chinese replacement. This article will share some techniques for using regular expressions to implement Chinese substitution in PHP, and provide specific code examples. 1. Use the preg_replace function to implement Chinese replacement. The preg_replace function in PHP can be used

PHP regular replacement examples: quickly master replacement skills PHP regular replacement examples: quickly master replacement skills Feb 29, 2024 pm 06:33 PM

PHP regular replacement examples: quickly master replacement skills. With the development of the Internet, website development has become more and more common. In website development, it is often necessary to replace strings, and regular expressions are a very powerful tool that can quickly search and replace strings. This article will introduce how to use regular expressions in the PHP language to perform replacement operations, and provide specific code examples to help readers quickly master replacement techniques. 1.preg_replace function in PHP, you can use preg

An in-depth explanation of PHP regular expression escaping An in-depth explanation of PHP regular expression escaping Mar 21, 2023 pm 02:52 PM

​Regular expressions are a powerful tool for matching strings and can facilitate string manipulation. However, in the process of writing regular expressions, sometimes you may need to match some special characters, such as "\", "|", "{", etc. These characters have special meanings in regular expressions and need to be escaped.

See all articles