PHP 정규식

Aug 08, 2016 am 09:20 AM
echo match str

정규식이란

정규식은 특정 문자를 결합하여 일반 문자열로 사용하여 문자열에 대해 작동하는 논리식입니다. , 이를 정규 매칭 패턴이라고 합니다.

$p = '/apple/'; $str = "apple banna"; if (preg_match($p, $str)) { echo 'matched'; }

'/apple/' 문자열은 사과 문자열이 소스 문자열에 존재하는지 여부를 일치시키는 데 사용되는 정규식입니다.

PHP에서는 정규 매칭을 위해 PCRE 라이브러리 함수를 사용합니다. 예를 들어, 위 예의 preg_match는 정규 매칭을 수행하는 데 사용되며, 이는 문자 유형을 결정하는 데 자주 사용됩니다. 패턴이 존재합니다.

정규식의 기본 구문

PCRE 라이브러리 함수에서 일반 일치 패턴은 구분 기호와 메타 문자를 사용합니다. 구분 기호는 숫자, 백슬래시 및 공백이 아닌 문자를 제외한 모든 문자일 수 있습니다. 일반적으로 사용되는 구분 기호는 슬래시(/), 해시 기호(#) 및 부정 기호(~)입니다. 예:

/foo bar/ #^[^0-9]$# ~php~

패턴에 구분 기호가 포함된 경우 구분 기호는 다음과 같아야 합니다. 백슬래시()를 사용하여 이스케이프 처리합니다.

/http:\/\//

패턴에 구분 문자가 많이 포함된 경우 다른 문자를 구분 기호로 사용하는 것이 좋습니다. 또는 preg_quote를 사용하여 이스케이프할 수 있습니다.

$p = 'http://'; $p = '/'.preg_quote($p, '/').'/'; echo $p;

패턴 수정자는 구분 기호 뒤에 사용할 수 있습니다. 패턴 수정자에는 i, m, s, x 등이 포함됩니다. 예를 들어 i 수정자를 사용하면 대소문자 일치를 무시할 수 있습니다.

$str = "Http://www.imooc.com/"; if (preg_match('/http/i', $str)) { echo '匹配成功'; }

메타 문자 및 이스케이프

는 정규 표현식에서 특별한 의미를 갖습니다. 일반적으로 사용되는 메타 문자는

입니다. 일반적으로 대상(또는 여러 줄 모드의 줄)의 시작 위치를 확인하기 위해
^ 문자를 이스케이프하는 데 사용됩니다. ).start)
$ 대상의 끝 위치(또는 여러 줄 모드의 경우 줄 끝)
를 확인합니다. 개행 문자를 제외한 모든 문자와 일치합니다(기본값)
[시작 문자 클래스 정의
] 문자 종료 클래스 정의
| 선택적 분기 시작
(하위 그룹
의 시작 태그) 하위 그룹
의 종료 태그 0 또는 1 일치를 나타냅니다. 수량자의 탐욕적 성격을 변경하기 위해 수량자 뒤에 배치됩니다. (수량자 조회)
* 수량자, 0개 이상의 일치
+ 수량자, 1개 이상의 일치
{사용자 정의 수량자 시작 태그
} 사용자 정의 수량자 종료 태그

//下面的\s匹配任意的空白符,包括空格,制表符,换行符。[^\s]代表非空白符。[^\s]+表示一次或多次匹配非空白符。 $p = '/^我[^\s]+(苹果|香蕉)$/'; $str = "我喜欢吃苹果"; if (preg_match($p, $str)) { echo '匹配成功'; }

메타문자에는 두 가지 사용 시나리오가 있습니다. 하나는 어디에서나 사용할 수 있다는 것이고, 다른 하나는 대괄호 안에만 사용할 수 있다는 것입니다.

이스케이프 문자
^은 첫 번째 문자(대괄호 안)로 사용되는 경우에만 문자 클래스의 부정을 나타냅니다.
- 문자 범위를 표시합니다

^가 뒷괄호 바깥쪽에 있으면 어설션 대상의 시작 위치를 나타내지만 대괄호 안에 있으면 문자 클래스의 부정을 나타냅니다. 대괄호 안의 빼기 기호는 0과 같은 문자 범위를 표시할 수 있습니다. -9. 0에서 9 사이의 모든 숫자.

//下面的\w匹配字母或数字或下划线。 $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/'; $str = "我的邮箱是Spark.eric@imooc.com"; preg_match($p, $str, $match); echo $match[0];

그리디 모드와 게으른 모드

각각의 정규식은 메타 문자는 문자와 일치합니다. +를 사용하면 탐욕스러워집니다. 가능한 한 많은 문자와 일치하지만 물음표 ? 문자를 사용하면 가능한 한 적은 문자와 일치하므로 게으른 모드입니다.

그리디 모드: 일치할 수 있거나 없을 때 매칭을 우선시합니다.

//下面的\d表示匹配数字 $p = '/\d+\-\d+/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

게으른 모드: 일치할 수 있거나 없을 때 일치하면 먼저 일치합니다.

$p = '/\d?\-\d?/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:0-1

일치하지 않는 경우 일치하는 문자의 길이를 정확히 알면 {}를 사용하여 일치하는 문자 수를 지정할 수 있습니다.

$p = '/\d{3}\-\d{8}/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678

정규식을 사용하여 일치

정규식을 사용하는 목적 문자열 처리보다 더 나은 결과를 얻는 것입니다. 이 함수는 보다 유연한 처리 방법을 가지므로 문자열 처리 함수와 마찬가지로 부분 문자열이 있는지 확인하고 문자열을 교체하고 문자열을 분할하고 패턴 부분 문자열을 얻는 등의 작업에 주로 사용됩니다.

PHP는 PCRE 라이브러리 함수를 사용하여 패턴을 설정한 후 관련 처리 함수를 호출하여 일치하는 결과를 얻는 방식으로 일반적인 처리를 수행합니다.

preg_match는 일치를 수행하는 데 사용되며, 패턴이 성공적으로 일치하는지 확인하거나 일치하는 결과를 얻는 데 사용할 수 있습니다. 0 또는 1. 1회 일치 후 검색이 중지됩니다.

$subject = "abcdef"; $pattern = '/def/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => def )

위 코드는 단순히 일치를 수행하고 단순히 def가 일치할 수 있는지 여부를 결정하지만 정규식의 힘은 패턴 일치이므로 더 많은 경우 패턴이 일치하게 됩니다. 사용됨:

$subject = "abcdef"; $pattern = '/a(.*?)d/'; preg_match($pattern, $subject, $matches); print_r($matches); //结果为:Array ( [0] => abcd [1] => bc )

정규식을 사용하여 패턴을 일치시키고 더 유용한 데이터를 얻을 수 있습니다.

查找所有匹配结果

preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。

$p = "|<[^>]+>(.*?)]+>|i"; $str = "example:
this is a test
"; preg_match_all($p, $str, $matches); print_r($matches);

可以使用preg_match_all匹配一个表格中的数据:

$p = "/(.*?)<\/td>\s*(.*?)<\/td>\s*<\/tr>/i"; $str = "
Eric25
John26
"; preg_match_all($p, $str, $matches); print_r($matches);

$matches结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。

正则表达式的搜索和替换

正则表达式的搜索与替换在某些方面具有重要用途,比如调整目标字符串的格式,改变目标字符串中匹配字符串的顺序等。

例如我们可以简单的调整字符串的日期格式:

$string = 'April 15, 2014'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '$3, ${1} $2'; echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15

其中${1}与$1的写法是等效的,表示第一个匹配的字串,$2代表第二个匹配的。

通过复杂的模式,我们可以更加精确的替换目标字符串的内容。

$patterns = array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/', '/^\s*{(\w+)}\s*=/'); $replace = array ('\3/\4/\1\2', '$\1 =');//\3等效于$3,\4等效于$4,依次类推 echo preg_replace($patterns, $replace, '{startDate} = 1999-5-27'); //结果为:$startDate = 5/27/1999 //详细解释下结果:(19|20)表示取19或者20中任意一个数字,(\d{2})表示两个数字,(\d{1,2})表示1个或2个数字,(\d{1,2})表示1个或2个数字。^\s*{(\w+)\s*=}表示以任意空格开头的,并且包含在{}中的字符,并且以任意空格结尾的,最后有个=号的。

用正则替换来去掉多余的空格与字符:

$str = 'one two'; $str = preg_replace('/\s+/', ' ', $str); echo $str; // 结果改变为'one two'

正则匹配常用案例

正则匹配常用在表单验证上,一些字段会有一定的格式要求,比如用户名一般都要求必须是字母、数字或下划线组成,邮箱、电话等也都有自己的规则,因此使用正则表达式可以很好的对这些字段进行验证。

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了php正则表达式,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. 기술 세계를 탐험할 수 있도록 Go 언어 오픈 소스 프로젝트 5개를 선택했습니다. Jan 30, 2024 am 09:08 AM

오늘날 급속한 기술 발전의 시대에 프로그래밍 언어는 비가 내린 뒤 버섯처럼 솟아오르고 있습니다. 많은 주목을 받고 있는 언어 중 하나가 바로 Go 언어인데, 단순성, 효율성, 동시성 안전성 등 다양한 기능으로 많은 개발자들에게 사랑을 받고 있습니다. Go 언어는 뛰어난 오픈 소스 프로젝트가 많이 포함된 강력한 생태계로 유명합니다. 이 기사에서는 선택된 Go 언어 오픈 소스 프로젝트 5개를 소개하고 독자가 Go 언어 오픈 소스 프로젝트의 세계를 탐색하도록 안내합니다. KubernetesKubernetes는 자동화를 위한 오픈 소스 컨테이너 오케스트레이션 엔진입니다.

Laravel 개발: Laravel Echo 및 Pusher를 사용하여 WebSocket 통신을 구현하는 방법은 무엇입니까? Laravel 개발: Laravel Echo 및 Pusher를 사용하여 WebSocket 통신을 구현하는 방법은 무엇입니까? Jun 13, 2023 pm 05:01 PM

Laravel은 확장성이 뛰어나고 효율적인 인기 있는 PHP 프레임워크로 개발자가 고품질 웹 애플리케이션을 신속하게 구축할 수 있는 많은 강력한 도구와 라이브러리를 제공합니다. 그중 LaravelEcho와 Pusher는 WebSocket 통신을 쉽게 구현할 수 있는 두 가지 매우 중요한 도구입니다. 이 기사에서는 Laravel 애플리케이션에서 이 두 도구를 사용하는 방법을 자세히 설명합니다. WebSocket이란 무엇입니까? 웹소켓

Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Go 언어 개발 필수 사항: 인기 있는 프레임워크 권장 사항 5가지 Mar 24, 2024 pm 01:15 PM

"Go 언어 개발 필수 사항: 5가지 인기 프레임워크 권장 사항" 빠르고 효율적인 프로그래밍 언어인 Go 언어는 점점 더 많은 개발자들이 선호하고 있습니다. 개발 효율성을 높이고 코드 구조를 최적화하기 위해 많은 개발자는 프레임워크를 사용하여 애플리케이션을 빠르게 구축하는 방법을 선택합니다. Go 언어의 세계에는 선택할 수 있는 훌륭한 프레임워크가 많이 있습니다. 이 기사에서는 인기 있는 Go 언어 프레임워크 5개를 소개하고 독자가 이러한 프레임워크를 더 잘 이해하고 사용할 수 있도록 구체적인 코드 예제를 제공합니다. 1.GinGin은 빠른 속도를 갖춘 경량 웹 프레임워크입니다.

PHP에서 echo 키워드의 역할과 사용법에 대한 자세한 설명 PHP에서 echo 키워드의 역할과 사용법에 대한 자세한 설명 Jun 28, 2023 pm 08:12 PM

PHP에서 echo 키워드의 역할과 사용법에 대한 자세한 설명 PHP는 널리 사용되는 서버측 스크립트 언어로 웹 개발에 널리 사용됩니다. echo 키워드는 PHP에서 내용을 출력하는 데 사용되는 메서드입니다. 이번 글에서는 echo 키워드의 기능과 사용법을 자세히 소개하겠습니다. 기능: echo 키워드의 주요 기능은 콘텐츠를 브라우저에 출력하는 것입니다. 웹 개발에서는 데이터를 프런트엔드 페이지에 동적으로 표시해야 합니다. 이때 echo 키워드를 사용하여 데이터를 페이지에 출력할 수 있습니다. 이자형

시장에서 가장 인기 있는 golang 프레임워크는 무엇입니까? 시장에서 가장 인기 있는 golang 프레임워크는 무엇입니까? Jun 01, 2024 pm 08:05 PM

현재 가장 인기 있는 Go 프레임워크는 다음과 같습니다. Gin: 가볍고 고성능 웹 프레임워크이며 간단하고 사용하기 쉽습니다. Echo: 고성능 라우팅 및 미들웨어를 제공하는 빠르고 사용자 정의가 가능한 웹 프레임워크입니다. GorillaMux: 고급 라우팅 구성 옵션을 제공하는 빠르고 유연한 멀티플렉서입니다. Fiber: 높은 동시 요청을 처리하는 성능 최적화된 고성능 웹 프레임워크입니다. Martini: 풍부한 기능 세트를 제공하는 객체 지향 디자인을 갖춘 모듈식 웹 프레임워크입니다.

Go 언어 프레임워크 살펴보기: 놓칠 수 없는 5가지 선택! Go 언어 프레임워크 살펴보기: 놓칠 수 없는 5가지 선택! Feb 19, 2024 pm 02:29 PM

빠르고 효율적인 프로그래밍 언어인 Go 언어는 항상 프로그래머들이 선호해 왔습니다. Go 언어 생태계에서 프레임워크는 개발자가 애플리케이션을 더 빠르게 구축하는 데 중요한 역할을 합니다. 이 글에서는 다섯 가지 Go 언어 프레임워크를 소개하여 해당 프레임워크의 특징과 사용법을 이해할 수 있도록 하겠습니다. 1. Gin 프레임워크 Gin 프레임워크는 빠르고 고성능 특성을 갖춘 경량 웹 프레임워크입니다. Gin 프레임워크를 사용하여 RESTful API 및 웹 애플리케이션을 빠르게 구축하세요. 다음은 간단한 예제 코드입니다:

Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링 구현 Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링 구현 Jun 24, 2023 am 11:49 AM

인터넷의 발달과 정보기술의 발달로 빅데이터 시대가 도래하면서 데이터 분석, 머신러닝 등의 분야도 널리 활용되고 있다. 이러한 분야에서 작업 스케줄링은 피할 수 없는 문제입니다. 효율적인 작업 스케줄링을 달성하는 방법은 효율성을 향상시키는 데 중요합니다. 이 글에서는 Golang의 웹 프레임워크인 Echo 프레임워크를 사용하여 분산 작업 스케줄링을 구현하는 방법을 소개합니다. 1. Echo 프레임워크 소개 Echo는 확장성이 뛰어나고 가벼운 고성능 GoWeb 프레임워크입니다. HTTP를 기반으로 합니다.

Python 내장 유형 str 소스 코드 분석 Python 내장 유형 str 소스 코드 분석 May 09, 2023 pm 02:16 PM

1유니코드 컴퓨터 저장의 기본 단위는 8비트로 구성된 바이트(byte)이다. 영어는 26개의 문자와 여러 개의 기호로만 구성되므로 영어 문자를 바이트 단위로 직접 저장할 수 있습니다. 하지만 다른 언어(예: 중국어, 일본어, 한국어 등)는 문자 수가 많기 때문에 인코딩에 여러 바이트를 사용해야 합니다. 컴퓨터 기술이 확산됨에 따라 비라틴어 문자 인코딩 기술이 계속 발전하고 있지만 여전히 두 가지 주요 제한 사항이 있습니다. 다국어 지원이 불가능합니다. 한 언어의 인코딩 방식을 다른 언어에서 사용할 수 없으며 통일된 표준이 없습니다. 예를 들어 중국어에는 GBK, GB2312, GB18030 등과 같은 여러 인코딩 표준이 있습니다. 인코딩 방법이 통일되어 있지 않기 때문에 개발자는 서로 다른 인코딩 간에 전환해야 하며 많은 오류가 필연적으로 발생합니다.

See all articles