php preg_replace求解
如题,有一段文本
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 run ----------
123456abcdefgsdfsdafdf---dffsafd
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;
---------- PHP run ----------
123456abcdefgsdfsdafdf---dffsafd---dsfsdfd---sdfsdfsd---
输出完成 (耗时 0 秒)
$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 = '
下次把需求描述清楚,要不怎么理解你的意思呢
(导体)(?!.*?<\/a>)
关于这个正则的简单说明:
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>';$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>';$str = preg_replace('/(导体)(?!(:?[^<]|<(?!a)[^>]*>)*<\/a>)/imu', '<a>$1</a>', $str);echo $str;
。。。。。。这个才是
其实一直想问大家,preg_replace是不是不改变原来字符串的值,如果我想改变,该怎么做呢

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The enumeration function in PHP8.1 enhances the clarity and type safety of the code by defining named constants. 1) Enumerations can be integers, strings or objects, improving code readability and type safety. 2) Enumeration is based on class and supports object-oriented features such as traversal and reflection. 3) Enumeration can be used for comparison and assignment to ensure type safety. 4) Enumeration supports adding methods to implement complex logic. 5) Strict type checking and error handling can avoid common errors. 6) Enumeration reduces magic value and improves maintainability, but pay attention to performance optimization.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...
