欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

正则表达式 - PHP 正则替换的问题

程序员文章站 2022-04-21 14:34:07
...
俺的正则比较菜,现在有个正则替换的问题一直搞不定,需求是这样的:

一些内容里的标签

(这里有任意内容和标签)正则表达式 - PHP 正则替换的问题( 这里也有任意内容和标签)

然后项替换成这样:

(这里有任意内容和标签)( 这里也有任意内容和标签)

正则表达式 - PHP 正则替换的问题

简单说就是img外面包上figure然后抽出来放到P后面,然后用preg_replace该怎么写呢?

回复内容:

俺的正则比较菜,现在有个正则替换的问题一直搞不定,需求是这样的:

一些内容里的标签

(这里有任意内容和标签)正则表达式 - PHP 正则替换的问题( 这里也有任意内容和标签)

然后项替换成这样:

(这里有任意内容和标签)( 这里也有任意内容和标签)

正则表达式 - PHP 正则替换的问题

简单说就是img外面包上figure然后抽出来放到P后面,然后用preg_replace该怎么写呢?

我可否理解为,

  • 提取p下面的所有img标签到p外,如果是多个img,这个需要使用preg_match才行

  • 并且p里面会有其他标签,除了p标签外

如果里面只有一个img

//正则
$p = '#

.*?)>(?.*?)(?正则表达式 - PHP 正则替换的问题\)(?.*?)

#i'; //替换 $r = '

$2$4

$3
'; //原内容 $s = '

fsdfsdfsf正则表达式 - PHP 正则替换的问题kolja;ad;lasd

'; echo preg_replace($p, $r, $s); // 结果: //

fsdfsdfsfkolja;ad;lasd

正则表达式 - PHP 正则替换的问题

有多个img

$s = '

fsdfsdfsf正则表达式 - PHP 正则替换的问题kolja;a正则表达式 - PHP 正则替换的问题d;lasd

asdaa

正则表达式 - PHP 正则替换的问题

'; echo preg_replace_callback('#

.*?)>(?.*?)

#', function($matches) { preg_match_all('##', $str = $matches[0], $matches1, PREG_OFFSET_CAPTURE ); foreach (array_reverse($matches1[0]) as $v) $str = substr_replace($str, '', $v[1], strlen($v[0])); return $str.'
'.implode('',array_map(function($v){return $v[0];}, $matches1[0])).'
'; }, $s); // 结果: //

fsdfsdfsfkolja;ad;lasd

正则表达式 - PHP 正则替换的问题正则表达式 - PHP 正则替换的问题
asdaa

正则表达式 - PHP 正则替换的问题
相关标签: 正则表达式 php