如题,有一段文本
123456 abcdefgsdfsdafdf abcdffsafd
目标:将第二次出现的abc进行替换,第一次不做操作
菜鸟求解
替换为什么?
你确认这段文本中和只出现一次么?
$test = 'test test test1';$arr[0] = '/(test)/';$arr[1] = '/(yjq)/';$val[0] = 'yjq';$val[1] = 'test';$test1 = preg_replace($arr[0], $val[0], $test);$test1 = preg_replace($arr[1], $val[1], $test1,1);echo $test.':'.$test1;
<?php $str = '123456<a href="">abcdefg</a>sdfsdafdfabcdffsafd';$str = preg_replace('/(abc)(.*?)\1/im', '$1$2---', $str);echo $str; PHP code
$str = '123456abcdefgsdfsdafdfabcdffsafd';
$str = preg_replace('/(abc)(.*?)\1/im', '$1$2---', $str);
echo $str;
---------- PHP run ---------……
正解,我写的老长,正则只要这点,很强大啊,看来要深入学习了。
PHP code
$str = '123456abcdefgsdfsdafdfabcdffsafd';
$str = preg_replace('/(abc)(.*?)\1/im', '$1$2---', $str);
echo $str;
---------- PHP run ----------
123456
这个不能替换后面更多个abc吧?
我暂时没环境测。。。万一不能,可以考虑preg_replace_callback
如题,有一段文本
123456abcdefgsdfsdafdfabcdffsafd
目标:将第二次出现的abc进行替换,第一次不做操作
菜鸟求解
你说的对,不只一次,正则老是晕,请详解
嗯,我试试preg_replace_callback
$str = '123456abcdefgabceeesdfsdafdfabcdffsafdabcdefg';
$str = preg_replace('/(?))abc/iU', '---', $str);
echo $str,'
';
只适用于 有且仅有标签
↑↑结果为123456abcdefg---eeesdfsdafdf---dffsafd---defg
echo
写多了,这里省略
如果是
$str = '123456这里还有其他字符abcdefgabceeesdfsdafdfabcdffsafdabcdefg';
那就很麻烦了
如果是
$str = '123456这里还有其他字符abcdefgabceeesdfsdafdfabcdffsafdabcdefg';
那就很麻烦了
前面还真有其它的字符了,是不是可以匹配 abc前后没有a标签的正则,应该怎么写
<?php $str = '123456<a href="">abcdefg</a>sdfsdafdfabcdffsafdabcdsfsdfdabcsdfsdfsdabc';$str = preg_replace('/(^(?:.*?)(abc)(?:.*?)|.*?)abc/im', '$1---', $str);echo $str;
$str = '123456<a href="">abcdefg</a><a href="">sdf ssdfdabcdefg</a>sdfsdafdfabcdffsafdabcdsfsdfdabcsdfsdfsdabc';$str = preg_replace('/(^(?:.*?)(abc)(?:.*?)|.*?)abc/im', '$1---', $str);echo $str;结果为123456<a href="">abcdefg</a><a href="">sdfssdfd---defg</a>sdfsdafdf---dffsafd---dsfsdfd---sdfsdfsd---//比如 导体为关键字,前面两个不能加了,没有加过的也只有加一个连接,也就是第三个导体$str = '<p>元<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体材料</a><a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a>制造厂,导体导体导体导体导体</p>';
//比如 导体为关键字,前面两个不能加了,没有加过的也只有加一个连接,也就是第三个 导体
$str = '
下次把需求描述清楚,要不怎么理解你的意思呢
(导体)(?!.*?)
关于这个正则的简单说明:
1、我的理解是只要后面不跟着一个闭合的标签,我就认为这个导体不在一个链接内
2、正则没有统一的格式,也就是没有一个能解决所有问题,要跟着需求走的
3、你也可以先符合“导体”的内容替换成 “导---------体”, 然后将所有的“导体”加上链接,接着最后将“导---------体”替换成“导体”,也一样可以得到目的
<?php $str = '<p>元<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体材料</a><a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a>制造厂,导体导体导体导体导体</p>';$str = preg_replace('/(导体)(?!.*?</a>)/imu', '<a>$1</a>', $str);echo $str;
<?php $str = '<p>元<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体材料</a><a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a>制造厂,导体导体导体导体导体<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a></p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/xiazai/js/5805">
<img src="https://img.php.cn/upload/jscode/000/120/096/5e141a807a7f1326.jpg" alt="PHP多文件上传插件">
</a>
<div class="aritcle_card_info">
<a href="/xiazai/js/5805">PHP多文件上传插件</a>
<p>PHP多文件上传插件</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="PHP多文件上传插件">
<span>149</span>
</div>
</div>
<a href="/xiazai/js/5805" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="PHP多文件上传插件">
</a>
</div>
<p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p>';$str = preg_replace('/(导体)([^<]|<(?!/a>)[^>]*>)/imu', '<a>$1</a>$2', $str);echo $str;
你太强了,我想的是判断附近有没有a标签,没想到只要判断有没有标签就可以了,谢谢各位的回答,分不多,结了
纠结一大半天了
<?php $str = '<p>元<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体材料</a><a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a>制造厂,导体导体导体导体导体<a target="_blank" href="http://www.trjcn.com/news/news--type-list/cid-21/industry_id-14.html">半导体</a></p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p>';$str = preg_replace('/(导体)(?!(:?[^<]|<(?!a)[^>]*>)*</a>)/imu', '<a>$1</a>', $str);echo $str;其实一直想问大家,preg_replace是不是不改变原来字符串的值,如果我想改变,该怎么做呢
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号