PHP에서 정규식 검색을 수행하고 바꾸는 방법은 무엇입니까?
在之前的文章中给大家带来了《PHP中全局正则表达式匹配及匹配数组元素(实例详解)》,其中给大家介绍了PHP中怎样通过正则表达式来进行匹配相应的元素的相关知识,本篇文章我们来看一下应该怎样执行一个正则表达式的搜索和替换。希望对大家有帮助!
在之前的文章中我们了解了怎样去执行正则表达式的匹配以及怎样去检测与给定模式的数组元素,这些通过 preg_match()
函数、preg_match_all()
函数和preg_grep()
函数就能够实现。但是对于字符串的操作,这些函数就有些鞭长莫及了。
字符串的替换是字符串操作中非常重要的内容之一。对于一些比较复杂的字符串替换操作,这时候我们就需要通过正则表达式的替换函数 preg_replace()
来完成正则表达式的搜索和替换工作,接下来我们就来看一下preg_replace()
函数的使用吧。
<strong><span style="font-size: 20px;">preg_replace()</span></strong>
函数
PHP 中的 preg_replace()
函数可以执行正则表达式的搜索和替换,是一个强大的字符串替换处理函数,可以用来处理那些比较复杂的字符串替换操作,该函数的语法格式如下:
preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])
其中参数需要注意的是:
$pattern
表示要搜索的模式,可以使一个字符串或字符串数组;$replacement
表示用于替换的字符串或字符串数组。其中如果这个参数是一个字符串,并且
$pattern
是一个数组,那么所有的模式都使用这个字符串进行替换。如果$pattern
和$replacement
都是数组,每个$pattern
使用$replacement
中对应的元素进行替换。如果$replacement
中的元素比$pattern
中的少,多出来的$pattern
使用空字符串进行替换。$subject
表示要进行搜索和替换的字符串或字符串数组,如果$subject
是一个数组,搜索和替换回在$subject
的每一个元素上进行, 并且返回值也会是一个数组。如果$subject
是一个数组,preg_replace()
函数会返回一个数组,其他情况下返回一个字符串。$limit
是个可选参数,每个模式在每个$subject
上进行替换的最大次数。默认是-1
。$count
是个可选参数,如果指定,将会被填充为完成的替换次数。
如果函数 preg_replace() 搜索到匹配项,则会返回被替换后的 $subject,否则返回没有改变的 $subject。preg_replace()
函数的每个参数(除了参数 $limit)都可以是一个数组。如果参数 $pattern 和参数 $replacement 都是数组,那么该函数将以其键名在数组中出现的顺序来进行处理。如果发生错误,则返回 NULL。
接下来我们通过一个简单的示例来看一下使用 preg_replace()
函数替换字符串,示例如下:
<?php $string = 'www.php.cn'; $pattern = '/(\w+).(\w+).(\w+)/i'; $replacement = 'http://$1.$2.$3/'; echo preg_replace($pattern, $replacement, $string); ?>
输出结果:
通过上述示例,我们需要知道的是:
参数 $replacement
中可以包含后向引用 \\n
或 $n
,语法上首选后者。每个这样的引用将被匹配到的第 n 个捕获子组捕获到的文本替换。n 可以是 0-99,\\0
和 $0
代表完整的模式匹配文本。
捕获子组的序号计数方式为:代表捕获子组的左括号从左到右,从 1 开始数。如果要在 $replacement
中使用反斜线,必须使用 4 个"\\\\
" 因为这首先是 php 的字符串,经过转义后是两个,再经过正则表达式引擎后才被认为是一个原文反斜线。
当在替换模式下工作并且后向引用后面紧跟着需要是另外一个数字,比如:在一个匹配模式后紧接着增加一个原文数字,不能使用 \\1 这样的语法来描述后向引用。
比如,\\11
将会使 preg_replace()
不能理解你希望的是一个 \\1
后向引用紧跟一个原文 1,还是一个 \\11
后向引用后面不跟任何东西。这种情况下解决方案是使用 ${1}1
。这创建了一个独立的 $1
后向引用,一个独立的原文 1
。
当使用被弃用的 e 修饰符时,这个函数会转义一些字符即:'
、"
、\
和 NULL
,然后进行后向引用替换。当这些完成后请确保后向引用解析完后没有单引号或双引号引起的语法错误,比如:'strlen(\'$1\'
)+strlen("$2"
)'。确保符合 PHP 的字符串语法,并且符合 eval 语法。因为在完成替换后,引擎会将结果字符串作为 php 代码使用 eval 方式进行评估并将返回值作为最终参与替换的字符串。
preg_filter()
函数
上文中介绍了preg_replace()
函数,是用来执行一个正则表达式的搜索和替换的,PHP preg_filter() 函数也用于执行一个正则表达式的搜索和替换,作用与preg_replace()
函数相同,不同的是 preg_filter()
函数只返回匹配成功的结果,而 preg_replace()
返回所有结果,不管是否匹配成功。
即使如此,我们也应该了解一下preg_filter()
函数的用法,关于 preg_filter()
的工作原理和参数说明可以参考 preg_replace()
函数。
接下来我们直接通过示例来看一下preg_filter() 函数的使用,示例如下:
<?php echo "<pre class="brush:php;toolbar:false">"; $arr1 = array( 'http://aaa.bbbbb.com/php/', 'http://aaa.bbbbb.com/java/', 'http://aaa.bbbbb.com/python/', 'http://www.google.com/cn/', 'http://cn.asdaf.com/', ); $pattern = array('/aaa\./','/bbbbb/'); $replacement = array('www.','baidu'); print_r( preg_replace($pattern, $replacement, $arr1) ); print_r( preg_filter($pattern, $replacement, $arr1) ); ?>
输出结果:
有上述示例能够看出,虽然同样是执行一个正则表达式的搜索和替换,preg_filter() 函数只返回匹配成功的结果,而 preg_replace() 返回所有结果,不管是否匹配成功。这就是preg_filter() 函数和preg_replace()函数的区别。
大家如果感兴趣的话,可以点击《PHP视频教程》、《正则表达式手册》进行更多关于PHP和正则表达式知识的学习。
위 내용은 PHP에서 정규식 검색을 수행하고 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
