ホームページ  >  記事  >  バックエンド開発  >  PHPの正規表現

PHPの正規表現

不言
不言オリジナル
2018-04-24 14:37:2559623ブラウズ

この記事では、特定の参考値を持つ PHP に関する正規表現を紹介します。必要な友達は参考にしてください。正規表現は文字列の結果を説明するものです。一致する文字列の一致、置換、およびインターセプトを実行できる書式設定パターン。 JavaScript や Java など、一般的に使用される言語には基本的に正規表現があります。実際、ある言語の通常の使用法を理解していれば、他の言語の通常のルールを使用することは比較的簡単です。さて、通常のルールを書き始めましょう。

関連する推奨事項:

1. PHPの正規表現正規表現構文チュートリアル (オンライン テスト ツールを含む)

2.

PHP 正規表現の簡単な紹介ビデオ チュートリアル

正規表現が文字列と一致する場合は、次の 2 つの基本原則に従います。
1. 左端の原則: 正規表現は常にターゲット文字列の左端から始まり、式の要件を満たす部分が一致するまで、またはターゲット文字列の末尾が一致するまで順番に一致します。 2. 最長の原則: 一致したターゲット文字列の場合、正規表現は常に正規表現の要件を満たす最も長い部分と一致します。つまり、グリーディ モードです​​

それでは、まず区切り文字から始めます。記述する場合は、一連の正規表現の始まりを示すために / ; # ~ を含めることが一般的です。例: 「/a.*a/」。式にエスケープ文字が多すぎる場合は、url;

$str = 'http://baidu.com';
$pattern = '/http:\/\/.*com/';//需要转义/
preg_match($pattern,$str,$match);
var_dump( $match);
$str = 'http://baidu.com';
$pattern = '#http://.*com#';//不需要转义/
preg_match($pattern,$str,$match);
var_dump( $match);
のように最初に # を使用することをお勧めします。 始まりと終わりの書き方がわかったので、次のステップは中間を判断することです。正規表現は、アトムとメタキャラクターを使用して左から右に結合されます。

たとえば、「a4b561c25d9afb9ac8dc4d70affff419zxcv0d36329ec37a2cc24d42c7229b69747a」の場合、「/a4b561c25d9afb9ac8dc4d70affff419.*0d36329ec37a2cc24d42c7229b69747a/」と一致します。ここで、.* は zxcv を表します。

それでは、一般的なアトムとメタキャラクターとは何でしょうか?

d は数字と一致します。 [0-9]に相当します。
Dは、数字以外の文字と一致します。 [^0-9] と同等。
fはフォームフィードと一致します。 x0c および cL に相当します。
nは改行文字と一致します。 x0a および cJ に相当します。
r は復帰文字と一致します。 x0d および cM に相当します。
s は、スペース、タブ、フォーム フィードなどを含む任意の空白文字と一致します。 【fnrtv】に相当。
S は空白以外の文字と一致します。 [^ fnrtv] に相当します。
tはタブ文字と一致します。 x09 および cI に相当します。
v は垂直タブ文字と一致します。 x0b および cK に相当します。
wは、アンダースコアを含む任意の単語文字と一致します。 「[A-Za-z0-9_]」と同等。
Wは、単語以外の文字と一致します。 「[^A-Za-z0-9_]」と同等。
xn は n と一致します。n は 16 進数のエスケープ値です。 16 進エスケープ値は正確に 2 桁の長さである必要があります。たとえば、「x41」は「A」と一致します。 「x041」は「x04」および「1」と同等です。 ASCII エンコーディングは正規表現で使用できます。
nm 8 進エスケープ値または後方参照を識別します。 nm の前に少なくとも nm 個の取得可能な部分式がある場合、nm は後方参照になります。 nm の前に少なくとも n が取得されている場合、n は後方参照であり、その後にリテラル m が続きます。前述の条件がいずれも満たされず、n と m が両方とも 8 進数 (0 ~ 7) である場合、nm は 8 進数のエスケープ値 nm と一致します。
nml n が 8 進数 (0 ~ 3) で、m と l が両方とも 8 進数 (0 ~ 7) の場合、8 進数のエスケープ値 nml と一致します。

unUnicode 文字を 16 進数で表します。たとえば、u00A9 は著作権記号 (?) に一致します。

. 「n」を除く任意の 1 文字と一致します

^ 入力文字列の先頭と一致します。文字フィールド [] では、「[^w]」は「w」と等しく、^w は単語文字で始まることを意味するなど、否定を意味します。

$ 入力文字列の終了位置と一致します。たとえば、「w$」は単語文字で終わることを意味します。

? {0,1} に相当する前の部分式 zero または 1 回 と一致します。たとえば、「do(es)?」は「do」または「does」と一致します。

* 前の部分式と0回以上一致します。これは、{0,}と同等です。たとえば、zo* は「z」、「zo」、「zoo」に一致します。

+ 前の部分式と 1 回以上一致します ({1,} に相当します)。たとえば、「zo+」は「zo」と「zoo」に一致します。

{n} n は負ではない整数で、n 回一致します。たとえば、「o{2}」は「Bob」または「Booob」には一致しませんが、「food」の 2 つの o には一致します。

{n,} n は負ではない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」のすべての「o」には一致します。 「o{1,}」は「o+」と同等です。 「o{0,}」は「o*」と同等です。

{n,m} m と n は両方とも非負の整数であり、n

[] 文字セット (文字フィールド)。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。

() () 内の内容と一致し、この一致を取得します。 n (n は 1 より大きい整数) の場合、式: '(w+) (:)//.*1' の場合、'http://baidu.com' は 'http://baidu.comhttp',1 と一致します。 httpを表します。

(?:) は一致しますが、一致結果は取得されず、後で使用するために保存されません。これは、「または」文字 (|) を使用してパターンの一部を結合する場合に便利です。たとえば、「industr(?:y|ies)」は「industry|industries」より短い式です。上記の式を「(?:w+)(:)//.*1」とすると、1は次のように表されます。

• |        x|y,匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

• [-]     字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。

• (?=pattern)正 向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹       配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配    "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹      配的搜索,而不是从包含预查的字符之后开始。
• (?!pattern)负 向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不     需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows    2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜         索,而不是从包含预查的字符之后开始

有时候最后定界符会有一个字母,如‘/as.*/i’,那这个i又是什么呢,这就是模式修正符;

i表示在和模式进行匹配进不区分大小写
m将模式视为多行,使用^和$表示任何一行都可以以正则表达式开始或结束
s如果没有使用这个模式修正符号,元字符中的"."默认不能表示换行符号,将字符串视为单行
x表示模式中的空白忽略不计
e正则表达式必须使用在preg_replace替换字符串的函数中时才可以使用(讲这个函数时再说)
A以模式字符串开头,相当于元字符^
Z以模式字符串结尾,相当于元字符$

U正则表达式的特点:就是比较“贪婪”,使用该模式修正符可以取消贪婪模式

       例:

$str = 'asddadsdasd';
        $pattern = '/a.*d/';
        preg_match($pattern,$str,$match);
        var_dump($match) ;//asddadsdasd;
       $str = 'asddadsdasd';                                  
        $pattern = '/a.*d/U';//$pattern = '/a.*?d/';
        preg_match($pattern,$str,$match);
        var_dump($match) ;//asd

php常用正则函数;

    匹配:preg_match()与preg_match_all()

        1  preg_match($pattern,$subject,[array &$matches])
        2  preg_match_all($pattern,$subject,array &$matches)

      1只会匹配一次,2会把所有符合的字符串都匹配出来,并且放置到matches数组中,而且这两个函数都有一个整形的返回          值。1是一维数组,2是二维数组

替换:preg_replace()

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。

相关推荐:

PHP正则表达式分享

以上がPHPの正規表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。