>  기사  >  백엔드 개발  >  PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

WBOY
WBOY원래의
2021-11-01 15:46:233539검색

저번 글에서는 "PHP에서 정규식 검색과 치환을 어떻게 수행하나요?"를 가져왔습니다. 》에서는 PHP에서 정규식 검색 및 치환을 수행하는 데 관련된 지식을 자세히 소개합니다. 이 기사에서는 계속해서 문자열 분할 및 정규식에서 이스케이프에 대한 관련 지식을 살펴보겠습니다. !

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

이전 기사에서는 PHP에서 전역 정규식 일치를 수행하고, 주어진 패턴과 일치하는 배열 요소를 검색하고, 정규식 검색 및 바꾸기를 수행하는 방법을 배웠습니다. 를 통해 이를 수행할 수 있습니다. ) 함수, preg_match_all() 함수, preg_grep() 함수 및 preg_replace() 함수는 일반을 사용하여 구현할 수 있습니다. 표현식 표현식의 주요 목적은 간단한 방법으로 강력한 기능을 구현하는 것입니다. preg_match() 函数、preg_match_all()函数、preg_grep() 函数和preg_replace() 函数就能够实现,使用正则表达式的主要目的就是为了通过简单的办法来实现强大的功能。

其中对于正则表达式与字符串之间的操作还有很多,其中就包括使用正则表达式分割字符串,那接下来我们就一起来看一下,我们怎样通过字符表达式来分割字符串。

<strong><span style="font-size: 20px;">preg_split() </span></strong>函数

在PHP中 preg_split() 函数通过一个正则表达式来分割字符串,该函数的语法格式如下:

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

其中需要注意的是:

$pattern表示用于匹配的模式,也即正则表达式;$subject表示要分隔的字符串;$limit是个可选参数,如果指定,就将限制分隔得到的子串最多只有 limit 个,并且最后一个子串将包含所有剩余部分。limit 值为 -10NULL 时都代表“不限制”,建议使用 NULL。

$flags是个可选参数,它有 3 个取值。若设置为 PREG_SPLIT_NO_EMPTY,则 preg_split() 将返回分隔后的非空部分。若设置为 PREG_SPLIT_DELIM_CAPTURE,则分隔的模式中的括号表达式将被捕获并返回。若设置为 PREG_SPLIT_OFFSET_CAPTURE,则对于每一个出现的匹配返回时会附加字符串偏移量。

这将会改变返回数组中的每一个元素,使每个元素成为一个由第 0 个元素为分隔后的子串、第 1 个元素为该子串在 subject 中的偏移量组成的数组。返回值就是返回一个使用 pattern 分割 subject 字符串后得到的子串组成的数组。

接下来我们通过示例来看一下 preg_split() 函数的用法,示例如下:

<?php
    echo "<pre class="brush:php;toolbar:false">";
    $subject = &#39;PHP中文网:http://www.php.cn/, baidu百度:http://www.baidu.com/&#39;;
    $pattern = &#39;/[\s,:]+/&#39;;
    print_r( preg_split($pattern, $subject) );
    print_r( preg_split($pattern, $subject, 3) );
?>

输出结果:

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

示例如下:

<?php
$str = &#39;father mother andyou&#39;;
var_dump($str);
$chars = preg_split(&#39;/ /&#39;, $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
var_dump($chars);
?>

输出结果:

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

由上述示例能够看出,通过preg_split() 函数能够完成通过一个真个表达式来分割字符串。接下来我们来看一下,怎样对正则表达式来进行转义。

<strong><span style="font-size: 20px;">PHP preg_quote()</span></strong> 函数

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符,包括所有大小写字母、数字、标点符号和一些符号。最简单的正则表达式是用于搜索字符串相比较的单个普通字符。例如,单字符正则表达式/A/会始终匹配字母 A。

除普通字符之外,正则表达式还可以包含“元字符”。元字符可分为单字符元字符和多字符元字符。例如,元字符d,它与数字字符相匹配。

PHP preg_quote() 函数用来对正则表达式字符串进行转义,也就是在特殊字符前边增加一个反斜杠,该函数的语法格式如下:

preg_quote($str [, $delimiter = NULL])

其中需要注意的是:

$str表示正则表达式字符串;$delimiter是个可选参数,额外增加的需要转义的字符。如果指定了 $delimiter 参数,被指定的字符也会被转义。这通常用于转义 PCRE 函数使用的分隔符。 / 是最常见的分隔符。

preg_quote() 函数会向参数 $str

정규식을 사용하여 문자열을 분할하는 것을 포함하여 정규식과 문자열 사이에는 많은 작업이 있습니다. 다음으로 문자 표현식을 통해 문자열을 분할하는 방법을 살펴보겠습니다.
🎜🎜<strong><span style="font-size: 20px;">preg_split() </span></strong>함수🎜🎜PHP에서 preg_split() 함수는 정규식을 통해 문자열을 분할합니다. 함수의 구문 형식은 다음과 같습니다. 🎜
<?php
    $url = &#39;http://www.baidu.com/&#39;;
    echo preg_quote($url) . "<br />";
    echo preg_quote($url, "/") . "<br />";
    $textbody = "baidu百度 is *very* good to study.";
    $word     = "*very*";
    echo preg_replace( "/".preg_quote($word)."/", "<i>".$word."</i>", $textbody );
?>
🎜주의해야 할 점은:
🎜🎜$pattern은 일치에 사용되는 패턴을 나타냅니다. 즉, $subject는 정규식을 나타냅니다. 구분할 문자열; $limit는 선택적 매개변수입니다. 지정하는 경우 제한으로 얻은 하위 문자열은 제한되며 마지막 하위 문자열에는 나머지 부분이 모두 포함됩니다. 제한 값이 -1, 0 또는 NULL 인 경우 "제한 없음"을 의미하며 NULL을 사용하는 것이 좋습니다. 🎜🎜$flags는 3개의 값을 갖는 선택적 매개변수입니다. PREG_SPLIT_NO_EMPTY로 설정하면 preg_split()은 분리된 비어 있지 않은 부분을 반환합니다. PREG_SPLIT_DELIM_CAPTURE로 설정하면 구분 패턴의 대괄호 표현식이 캡처되어 반환됩니다. PREG_SPLIT_OFFSET_CAPTURE로 설정하면 문자열 오프셋이 일치 항목이 발생할 때마다 반환에 추가됩니다. 🎜🎜이렇게 하면 반환된 배열의 각 요소가 변경되어 각 요소가 분리된 하위 문자열인 0번째 요소와 주제의 하위 문자열 오프셋인 첫 번째 요소로 구성된 배열이 됩니다. 반환값은 대상 문자열을 패턴을 이용하여 분할한 후 얻은 부분 문자열로 구성된 배열이다. 🎜🎜다음으로, preg_split() 함수의 사용법을 예시를 통해 살펴보겠습니다. 🎜
<?php
$keywords = &#39; for a g3/400&#39;;
$keywords = preg_quote($keywords, &#39;/&#39;);
echo $keywords; // 返回 $40 for a g3\/400
?>
🎜출력 결과:
🎜🎜PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?🎜🎜예제는 다음과 같습니다. 🎜rrreee🎜출력 결과:
🎜🎜PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?🎜 🎜위의 예에서 볼 수 있듯이 preg_split을 통해 () 함수는 완전한 표현식으로 문자열을 분할할 수 있습니다. 다음으로 정규식을 이스케이프 처리하는 방법을 살펴보겠습니다. 🎜🎜<strong><span style="max-width:90%">PHP preg_quote()</span></strong> 기능🎜🎜일반 문자에는 모든 대문자 및 소문자, 숫자, 구두점 및 일부 기호를 포함하여 메타 문자로 명시적으로 지정되지 않은 모든 인쇄 가능 및 인쇄 불가능 문자가 포함됩니다. 가장 간단한 정규식은 검색 문자열을 비교하는 데 사용되는 단일 일반 문자입니다. 예를 들어 단일 문자 정규식 /A/는 항상 문자 A와 일치합니다. 🎜🎜일반 문자 외에도 정규식에는 "메타 문자"가 포함될 수 있습니다. 메타 문자는 단일 문자 메타 문자와 다중 문자 메타 문자로 나눌 수 있습니다. 예를 들어 숫자 문자와 일치하는 메타문자 d가 있습니다. 🎜🎜PHP preg_quote() 함수는 정규식 문자열을 이스케이프하는 데 사용됩니다. 즉, 특수 문자 앞에 백슬래시 를 추가하는 것입니다. 이 함수의 구문 형식은 다음과 같습니다. 🎜rrreee🎜주의해야 할 점은:
🎜🎜$str은 정규식 문자열을 나타냅니다. $delimiter는 선택적인 매개변수이며 추가 문자입니다. 탈출하다. $delimiter 매개변수가 지정되면 지정된 문자도 이스케이프됩니다. 이는 일반적으로 PCRE 함수에서 사용되는 구분 기호를 이스케이프하는 데 사용됩니다. /는 가장 일반적인 구분 기호입니다. 🎜🎜preg_quote() 함수는 $str 매개변수가 제공하는 각 정규식 문자 앞에 백슬래시를 추가합니다. 이는 일반적으로 일부 런타임 문자열을 정규식으로 일치시켜야 할 때 사용됩니다. 🎜

正则表达式特殊字符有:. \ + * ? [ ^ ] $ ( ) { } = ! <code>> | : -    。要清楚/不是正则表达式特殊字符。

接下来我们通过示例来看一下使用 preg_quote() 函数对字符串进行转义,示例如下:

<?php
    $url = &#39;http://www.baidu.com/&#39;;
    echo preg_quote($url) . "<br />";
    echo preg_quote($url, "/") . "<br />";
    $textbody = "baidu百度 is *very* good to study.";
    $word     = "*very*";
    echo preg_replace( "/".preg_quote($word)."/", "<i>".$word."</i>", $textbody );
?>

输出结果:

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

示例如下:

<?php
$keywords = &#39;$40 for a g3/400&#39;;
$keywords = preg_quote($keywords, &#39;/&#39;);
echo $keywords; // 返回 \$40 for a g3\/400
?>

输出结果:

PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?

上述示例中,便是通过preg_quote() 函数用来对正则表达式字符串进行转义。

大家如果感兴趣的话,可以点击《PHP视频教程》、《正则表达式手册》进行更多关于PHP和正则表达式知识的学习。

위 내용은 PHP 정규식을 사용하여 문자열을 분할하고 이스케이프하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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