php下正则来匹配dede模板标签的代码_php技巧
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: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 "
$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 "
?>
输出内容:
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
)
)
)
测试代码打包下载

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 정규 표현식은 텍스트 처리 및 변환을 위한 강력한 도구입니다. 텍스트 내용을 구문 분석하고 특정 패턴에 따라 대체하거나 가로채서 텍스트 정보를 효과적으로 관리할 수 있습니다. 그 중 정규식의 일반적인 적용은 특정 문자로 시작하는 문자열을 바꾸는 것입니다.

Golang 정규 표현식은 파이프 문자 |를 사용하여 여러 단어 또는 문자열을 일치시키고 각 옵션을 논리적 OR 표현식으로 구분합니다. 예: "fox" 또는 "dog"와 일치: fox|dog은 "quick", "brown" 또는 "lazy"와 일치: (quick|brown|lazy)는 "Go", "Python" 또는 "Java"와 일치: Go| Python |Java는 단어 또는 4자리 우편번호와 일치합니다: ([a-zA

일반 규칙을 사용하여 PHP에서 중국어를 제거하는 방법: 1. PHP 샘플 파일을 만듭니다. 2. 중국어와 영어가 포함된 문자열을 정의합니다. 3. "preg_replace('/([\x80-\xff]*)/i'를 사용합니다. '',$a);" 일반 방법은 쿼리 결과에서 한자를 제거할 수 있습니다.

이 기사에서는 PHP 정규식을 사용하여 HTML 태그를 제거하고 HTML 문자열에서 일반 텍스트 콘텐츠를 추출하는 방법을 알아봅니다. HTML 태그를 제거하는 방법을 보여주기 위해 먼저 HTML 태그가 포함된 문자열을 정의해 보겠습니다.

PHP 정규 표현식을 사용하여 중국어 대체 기능 구현에 대한 팁 웹 개발에서 중국어 콘텐츠를 대체해야 하는 상황에 자주 직면합니다. 널리 사용되는 서버측 스크립팅 언어인 PHP는 중국어 대체를 쉽게 실현할 수 있는 강력한 정규식 기능을 제공합니다. 이 기사에서는 정규식을 사용하여 PHP에서 중국어 대체를 구현하는 몇 가지 기술을 공유하고 구체적인 코드 예제를 제공합니다. 1. preg_replace 함수를 사용하여 중국어 대체를 구현합니다. PHP의 preg_replace 함수를 사용할 수 있습니다.

웹사이트 보안은 점점 더 많은 관심을 받고 있으며, 데이터 전송 보안을 보장하기 위해 HTTPS 프로토콜을 사용하는 것은 현재 웹사이트 개발에서 중요한 부분이 되었습니다. PHP 개발에서 정규식을 사용하여 URL이 HTTPS 프로토콜인지 확인하는 방법은 무엇입니까? 여기 우리가 알아보러 왔습니다. 정규식 정규식은 규칙을 설명하는 데 사용되는 표현식으로, 텍스트 처리를 위한 강력한 도구이며 텍스트 일치, 검색 및 교체에 널리 사용됩니다. PHP 개발에서는 정규식을 사용하여 URL의 http를 일치시킬 수 있습니다.

정규식은 문자열 일치를 위한 강력한 도구이며 문자열 조작을 용이하게 할 수 있습니다. 그러나 정규식을 작성하는 과정에서 "\", "|", "{" 등과 같은 일부 특수 문자를 일치시켜야 하는 경우가 있습니다. 이러한 문자는 정규식에서 특별한 의미를 가지며 이스케이프해야 합니다.

웹사이트와 애플리케이션을 개발할 때 입력 데이터의 정확성과 형식을 확인하는 것이 중요합니다. PHP에서 정규식은 다양한 유형의 데이터를 검증하고 형식을 지정하는 데 사용할 수 있는 강력한 도구입니다. 그중에서도 입력 데이터를 숫자로 검증하는 것은 매우 일반적인 요구 사항입니다. 이 기사에서는 PHP에서 정규식을 사용하여 입력 데이터를 숫자로 확인하는 방법에 대해 설명합니다.
