Table of Contents
回复讨论(解决方案)
Home Backend Development PHP Tutorial php preg_replace求解

php preg_replace求解

Jun 23, 2016 pm 02:05 PM

如题,有一段文本
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;
Copy after login

<?php    $str = '123456<a href="">abcdefg</a>sdfsdafdfabcdffsafd';$str = preg_replace('/(abc)(.*?)\\1/im', '$1$2---', $str);echo $str;
Copy after login



---------- 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;
Copy after login



---------- 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---
Copy after login


第二个也被替换了,呃,我想要把没有加的过连接加上连接,加过的就不在处理了
功能用在关键字处理

//比如 导体为关键字,前面两个不能加了,没有加过的也只有加一个连接,也就是第三个导体$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>';
Copy after login

//比如 导体为关键字,前面两个不能加了,没有加过的也只有加一个连接,也就是第三个 导体
$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;
Copy after login

<?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;
Copy after login


刚才没有考虑后面有链接的情况 已经修改了


你太强了,我想的是判断附近有没有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;
Copy after login


。。。。。。这个才是

其实一直想问大家,preg_replace是不是不改变原来字符串的值,如果我想改变,该怎么做呢

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)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

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.

What are Enumerations (Enums) in PHP 8.1? What are Enumerations (Enums) in PHP 8.1? Apr 03, 2025 am 12:05 AM

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.

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

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? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

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

How to send a POST request containing JSON data using PHP's cURL library? How to send a POST request containing JSON data using PHP's cURL library? Apr 01, 2025 pm 03:12 PM

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 permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

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...

See all articles