ホームページ >バックエンド開発 >PHPチュートリアル >PHP の高度な機能の 1 つ: 正規表現の使用

PHP の高度な機能の 1 つ: 正規表現の使用

WBOY
WBOYオリジナル
2016-06-23 13:33:371014ブラウズ

PHP で文字列を処理する場合、文字列処理関数が使用できる場合は、もちろん単純な文字列処理関数を使用する必要がありますが、文字列処理関数の機能には限界があるため、より高度な文字列処理関数を使用する必要があります。強力なツールは正規表現です。

正規表現の簡単な説明

正規表現とは何ですか?

正規表現は、文字列の配置パターンを記述するカスタム文法規則です。正規表現は、特定のルールを使用してパターンを構築し、入力文字列情報と比較して、セグメント化、一致、検索、置換などの関連操作を実行します。正規表現は PHP に固有のものではありません。ここでは、PHP での正規表現の使用方法を紹介します。

使用場面

1. PHP では、文字列処理関数でタスクを完了できる場合は、正規表現を使用すべきではありません。

2. 形式チェックなど、正規表現を使用してのみ完了できる複雑な操作がいくつかあります。

3. 正規表現も文字列ですが、特別な意味を持つ文字列です。

4. いくつかの記述規則があり、プログラミング言語とみなすこともできます。

5. 正規表現は、特定の関数に適用する場合にのみ使用できます。それ以外の場合は、単純な文字列です。

小さな例

画像マッチングの例

1

"//iu"

これは HTML の画像タグと一致します。たとえば、

1

PHP の正規表現関数ライブラリ

PHP には、2 セットの正規表現関数ライブラリがあります。

1.POSIX 拡張正規表現関数 (ereg_)。

2.Perl互換の正規表現関数(preg_)。

Perl 互換関数ライブラリは、後から追加されたより強力な関数ライブラリです。また、JavaScript と Perl 言語もこのモードと互換性があるため、Perl 言語互換関数ライブラリを学習することをお勧めします。

学習する際には、次の2点を学習する必要があります

1. 正規表現の構文

2. PHPにおける正規表現の処理関数

正規表現の構文

あらゆる正規表現は以下から構成されています。は、区切り記号、アトム、メタキャラクター、パターン変更記号の 4 つの部分で構成されます。以下では、上記の例を使用して、これら 4 つの部分を順番に紹介します。

1. 区切り記号

文字、数字、バックスラッシュを除くすべての文字を区切り文字として使用できます。上の例では、先頭と末尾の 2 つのスラッシュ / が区切り文字として機能します。| |、{ }、# # などの他の文字を使用して定義することもできますが、通常はスラッシュ / を区切り文字として使用します。デリミタ。

2. アトム

上記の例では、 img はすべてアトムです。アトムは正規表現の最も基本的な単位であり、正規表現で単独で使用できる文字はアトムを少なくとも 1 つ含む必要があります。

使用時の注意点を以下にまとめます

1) アトムには、印刷文字と非印刷文字がすべて含まれます。印刷文字は、abc などの画面上で見ることができる文字であり、非印刷文字はスペースや改行などの目に見えない文字。

2). * + ? < ( < > をアトムとして使用したい場合は、エスケープ文字を使用してエスケープする必要があります。

3) エスケープ文字は意味のある文字にすることができます。たとえば、* はメタ文字であり、文字を 0 回から複数回一致させることを意味しますが、* は文字 * を表します。

4) さらに、エスケープ文字は意味のない文字を意味のある文字に変換することもできます。たとえば、d は任意の 10 進数を表すことができます。要約は次のとおりです:

d: 任意の 10 進数を表します。

D: 数字以外の文字を表します。

s: スペース、キャリッジリターン、t、n などの空白文字を表します

S: 空白以外の文字を表します

w: a-z、A-Z、0-9、underline_

W を含む任意の単語を表します: は、w 以外の任意の非単語、任意の文字を表します

5) アトム テーブルをカスタマイズし、角括弧内の任意の内容に一致する角括弧を定義します。たとえば、

正規表現「/[123]/」と文字列「abc2」は正常に一致します。

正規表現「/[a-z]/」と文字列「x3」は正常に一致します。

正規表現「/[1-3a-z]/」と文字列「x」は正常に一致します。

ここで、[^] 角括弧内に ^ を書くことは否定を意味し、アトムテーブルのアトムを除くことを意味しますが、[] の最初の文字には ^ を書かなければなりません。たとえば、

[^a-z] は a-z を除くすべての文字を表します

[^nt] は改行とタブを除くすべての文字を表します

3. メタ文字

上記の例では、*?すべてメタキャラクターです。メタキャラクターはアトムを変更するために使用される文字であり、単独で使用することはできません。

たとえば、* は前のアトム 0 を複数回一致させることを意味しますが、* を一致させたい場合は、

を表すエスケープ記号 * を追加する必要があります。特に . ドットはアトムを表すこともできます

1)* は、前の原子が 0 回から複数回現れる可能性があることを意味します

2) + は、前の原子が 1 回から複数回現れる可能性があること、つまり、少なくとも 1 つの原子

3)? 前のアトムが 0 回または 1 回出現できることを示します

4) { } は、前のアトムが出現する回数を定義するために使用されます

{m}、m は を表します。 integer, then the before 数字は m 回出現する必要があります

{m, n}, m, n は 2 つの整数、m

{m,} m は整数を表し、少なくとも m 回、最大で無限に出現することを意味します

したがって、* は {0,} として表現でき、+ は {1,} として表現でき、? は次のように表現できます。 {0,1}

5)。デフォルトでは、改行文字を除く任意の文字を意味します。+ との組み合わせは、少なくとも 1 つの文字列を意味します。 ) ^ 正規表現の最初の部分に直接 文字が出現する場合は、文字列がこの正規表現で始まる必要があることを意味します。たとえば、

^okay は、文字列が

7 で始まる必要があることを意味します。 )$ 正規表現の最後の文字に直接現れる場合は、

okay$ のように、文字列はこの正規表現で終わる必要がある、つまり文字列は ok で終わる必要があることを意味します。 注: ^okay$ は、ok の文字にのみ一致します。ok の始まりと終わりを一致させたい場合は、正規表現を ^okay.*okay$

と書くことができます。8) |または、その優先順位は最低であり、最後にその機能を考慮します

9) b は、

のような境界を表します 文字列 this is island, then bisb can match, it match the は真ん中にあり、そしての両側に境界があります。

10) B は、

Bisb などの非境界を表し、最初の is に一致し、bisB は 3 番目の is に一致します

11) () 括弧、キーポイント、関数は次のように要約されます。

( 1) 括弧内の要素を大きなアトムとして使用します

つまり、(abc)+ など、abcabc と一致する全体として使用します…

(2) 優先度の変更

括弧を追加すると優先度を上げることができます。

(3) サブパターンとして使用されます

正規表現に括弧を追加することは、サブパターンを追加することと同じです。すべての一致は 1 つの大きなパターンとして配列の最初の要素に配置され、各 () は配列の他の要素に順次配置されるサブパターンです。

以下で説明する preg_match メソッドでは、結果は $arr 変数に割り当てられ、最初に外側のパターンに一致し、次に内側のパターンに一致します。

1

"/PHP の高度な機能の 1 つ: 正規表現の使用/iu"

1

2

3

4

5

$pattern="/(d{4}(W)d{2}Wd{2} )s+(d{2}(W)d{2}Wd{2})s+(?:am|pm)/"; //正規表現パターン

$string="今日は 2010/09/15 15 : 35:28 pm..."; //上記のパターン文字列と一致させる必要がある変数文字列

if(preg_match($pattern, $string, $arr)){

print_r($arr);

}

結果

1

2

3

4

5

6

7

8

配列

(

[0] => 2010/09/15 15:35:28 pm

[1] => 2010/09/15

[2] => /

[3] = & gt; 15:35:28

[4] = & gt;::

)

(4) 大きなアトムとしてのサブモード

をキャンセルするか、優先順位を変更します。式 モードの前に 1 つ追加する限り?:

(?: Am | pm) // ) のように、サブモードをキャンセルできます。サブモードでは、全体として am|pm を直接使用します。

(5) バックリファレンス

パターンからサブパターンを直接取得して、正規表現パターンの一部として使用できます。置換関数 preg_replace 関数のような正規表現内にある場合は、サブパターンを取り出して、

1 を使用して最初のサブパターンを取得し、2 を使用して 2 番目のサブパターンを取得し、...5 (一重引用符で囲まれた正規表現であるか二重引用符で囲まれた正規表現であるかに注意してください) を置換文字列

" に追加します。二重引用符で囲まれた正規表現の \1" はエスケープ文字を解釈できるため、1 は \1
'1' として記述する必要があります。一重引用符で囲まれた正規表現ではこれは起こらず、1 は 1

として記述することができます。

例:

1

2

3

4

5

6

7

$pattern="/d{4}(W) d {2}\1d{2}s+d{2}(W)d{2}\2d{2}s+(?:am|pm)/"; //正規表現パターン

$string="today is 2010/09/15 15:35:28 pm..."; //上記のパターン文字列と一致する必要がある変数文字列

if(preg_match($pattern, $string, $arr)){

echo "正規表現 {$pattern} と文字列 {$string} が正常に一致しました
"

print_r($arr); '';

}

上の例では、(W) はすでに最初のスラッシュ / と一致しているため、続行する場合はすでに最初のサブパターンとして機能します。この一致を使用すると、\1 を使用してそれを表すことができます。これが単一引用符で囲まれた正規表現の場合は、次の \2 と同じ原理です。 4. モード補正記号

上記の例では、最後の / の後の i u がモード補正記号です。

1) ほんの数文字です

2) 一度に 1 つずつ使用することも、それぞれに特定の意味を持たせることも、複数の記号を連続して使用することもできます

3) それを最後に置きます、これは完全な正規表現です。表現のチューニングに使用され、正規表現機能の拡張とも言えます。

は次のように分類されます:

i

: パターンと一致するときに大文字と小文字が区別されないことを示します

m

: 文字の各行を新しい行、つまり改行の後の任意の行として扱います文字は文字列全体と見なすことができ、主な影響は ^ 記号と $ 記号です。

例:

1
2

3

4

5

$pattern = '/^abc/m'
$string ='で...

s: このパターン修正記号を使用しない場合、「.」を改行文字として使用することはできません。文字列を 1 行として扱うには、「.」も改行文字として使用できます。

x: パターン内の空白スペースは無視されることに注意してください。

1

2

3

$pattern = '/a b c/x'

$string ='abc'

//マッチングが成功する理由は次のとおりです。加算の x 以降は a b c をそのまま abc とみなす

e: preg_replace 関数で正規表現を使用する必要があります

A: 正規表現で始まる必要があります。これは、前に ^

を追加するのと同じです

Z: 正規表現で終わる必要がありますこれは最後に $

を追加するのと同じです

U: グリーディ モードをキャンセルします。または .*? グリーディ モードをキャンセルすることもできますが、両方を同時に使用すると逆の結果になります。ネガティブな効果とポジティブな効果が同時に現れ、Greedy モードが再びオンになります。

要約すると、正規表現の構成は

/アトムとメタキャラクター/パターン修正記号であり、/ は区切り文字ですが、Python など一部の言語ではこの区切り文字が必要ありません。

5. メタキャラクターの優先順位(理解)

1) エスケープ文字が最上位

2) ()、(?:)、{ }、括弧は 2 番目

3) * + ? {}

4)^$ b

5)|

6. よく使用される正規表現

1) 数値を確認するための式

1 数値: ^[0-9]*$
2 n を含む数値桁数: ^d{n}$
3 n 桁以上の数値: ^d{n,}$
4 m-n 桁の数値: ^d{m,n}$
5 0 および 0 以外で始まる数値: ^(0|[1-9][0-9]*)$
6 ゼロ以外で始まり小数点以下 2 桁までの数値: ^([1-9][0-9]*)+(。 [ 0-9]{1,2})?$
7 小数点以下 1 ~ 2 桁の正または負の数: ^(-)?d+(.d{1,2})?$
8 正の数、負の数、小数点: ^(-|+)?d+(.d+)?$
9 小数点以下 2 桁の正の実数: ^[0-9]+(.[0-9]{2})?$
10はい 小数点以下 1 ~ 3 桁の正の実数: ^[0-9]+(.[0-9]{1,3})?$
11 ゼロ以外の正の整数: ^[1-9]d*$または ^ ([1-9][0-9]*){1,3}$ または ^+?[1-9][0-9]*$
12 ゼロ以外の負の整数: ^-[1- 9] []0-9″*$ または ^-[1-9]d*$
13 負でない整数: ^d+$ または ^[1-9]d*|0$
14 正でない整数: ^-[1 -9]d*|0$ または ^((-d+)|(0+))$
15 非負の浮動小数点数: ^d+(.d+)?$ または ^[1-9] d*.d*| 0.d*[1-9]d*|0?.0+|0$
16 非正の浮動小数点数: ^((-d+(.d+)?)|(0+ (.0+)?)) $ または ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
17 正浮動小数点数: ^[1-9 ]d*.d*|0.d*[1-9]d*$ または ^(([0-9]+.[0-9]*[1-9] [0-9]*)|( [0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0- 9]*))$
18 負の浮動小数点数: ^-([1-9]d*.d*|0.d*[1-9]d*)$ または ^(-(([0-9 ]+.[0-9]*[ 1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|( [0-9]*[1-9 ][0-9]*)))$
19 浮動小数点数: ^(-?d+)(.d+)?$ または ^-?([1-9]d *.d*|0.d*[1 -9]d*|0?.0+|0)$

2) 文字表現をチェック

1 漢字: ^[u4e00-u9fa5]{0, }$
2 英語と数字: ^ [A-Za-z0-9]+$ または ^[A-Za-z0-9]{4,40}$
3 長さ 3 ~ 20 のすべての文字: ^.{ 3,20}$
4 by 26 文字の英文字の文字列: ^[A-Za-z]+$
5 26 文字の大文字の英文字の文字列: ^[A-Z]+$
6 26 文字の小文字の英文字の文字列:^[a-z]+$
7 数字と 26 個の英字で構成される文字列: ^[A-Za-z0-9]+$
8 数字、26 個の英字またはアンダースコアで構成される文字列: ^ w+$ または ^ w{3,20}$
9 中国語、英語、アンダースコアを含む数字: ^[u4E00-u9FA5A-Za-z0-9_]+$
10 中国語、英語、数字(アンダースコアおよびその他の記号は含まない): ^ [u4E00- u9FA5A-Za-z0-9]+$ または ^[u4E00-u9FA5A-Za-z0-9]{2,20}$
11 ^%&',;=?$" およびその他の文字を含む文字を入力できます。 [^%&',;=?$x22]+
12 ~ を含む文字の入力は禁止されています: [^~x22]+

3) 特別なニーズの表現

1 メールアドレス: ^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
2 ドメイン名: [a-zA-Z0-9 ] [-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3インターネット URL :[a-zA-z]+://[^s]* または ^http://([w-]+.)+[w-]+(/[w-./?%&=] * )?$
4 携帯電話番号: ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0 |1 |2|3|5|6|7|8|9])d{8}$
5 電話番号 ("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX") "、"XXXXXXX"、および "XXXXXXXX): ^((d{3,4}-)|d{3.4}-)?d{7,8}$
6 国内電話番号 (0511-4405222、021-87888822) : d {3}-d{8}|d{4}-d{7}
7 ID 番号 (15 桁、18 桁): ^d{15}|d{18}$
8 短い ID 番号 (数字、x で終わる文字): ^([0-9]){7,18}(x|X)?$ または ^d{8,18}|[0-9x]{8,18}|[0- 9X]{8,18}?$
9 アカウントは合法ですか (文字で始まり、5 ~ 16 バイトが使用可能、英数字のアンダースコアが使用可能): ^[a-zA-Z][a-zA-Z0-9_]{ 4 ,15}$
10 パスワード (文字で始まり、長さは 6 ~ 18 で、文字、数字、アンダースコアのみを使用できます): ^[a-zA-Z]w{5,17}$
11 強力パスワード (大文字、小文字、数字の組み合わせを含める必要があります。特殊文字は使用できません。長さは 8 ~ 10 です): ^(?=.*d)(?=.*[a-z])(?= .*[A-Z]) .{8,10}$
12 日付形式: ^d{4}-d{1,2}-d{1,2}
13 年間 12 か月 (01~09 および 1) ~12): ^ (0?[1-9]|1[0-2])$
14 月の 31 日 (01~09 および 1~31): ^((0?[1-9]) |((1| 2)[0-9])|30|31)$
15 お金の入力形式:
16 1. 受け入れられるお金の表現は 4 つあります:「10000.00」と「10,000.00」、「セントなし」 " "10000" と "10,000": ^[1-9][0-9]*$
17 2. これは 0 で始まらない任意の数値を意味しますが、文字 "0" は通過しないことも意味します, したがって、次の形式を使用します: ^(0|[1-9][0-9]*)$
18 3. 0、または 0 で始まらない数値。 begin: ^ (0|-?[1-9][0-9]*)$
19 4. これは、0 または負の可能性があり、0 で始まらない数値を意味します。ユーザーに 0 から始めてもらいます。マイナス記号を付けます。また、お金をマイナスにすることはできないので、それを削除します。以下に追加する必要があるのは、可能な小数部分を説明することです: ^[0-9]+(.[0-9]+)?$
20 5. 説明する必要があること はい、小数点の後に少なくとも 1 桁が必要であるため、「10.」は渡されませんが、「10」と「10.2」は渡されます: ^[0-9]+(.[ 0-9]{2} )?$
21 6. このように、小数点以下 2 桁でなければならないと規定していますが、厳しすぎると思われる場合は、次のようにすることもできます。 ]+(.[0-9]{1,2})?$
22 7. これにより、ユーザーは小数点以下 1 桁だけを書き込むことができます。次に、数値内のカンマを考慮する必要があります。次のようにします。 -9]{1,3}(,[0-9]{3})* (.[0-9]{1,2})?$
23 8.1 ~ 3 個の数値とその後に任意の数のカンマ + 3 が続きます数値の場合、カンマは必須ではなくオプションになります: ^([0-9]+ |[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{ 1,2})?$
24 注: これは最終結果です。空の文字列が受け入れられると思われる場合は、「+」を「*」に置き換えることができることを忘れないでください (奇妙です、なぜですか?) 最後に、関数を使用するときにバックスラッシュを削除することを忘れないでください。よくある間違いは次のとおりです
25 xml ファイル: ^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X] [m|M][l|L]$
26 漢字 正規表現: [u4e00-u9fa5]
27 全角文字: [^x00-xff] (漢字を含む)文字列(全角文字は2、ASCII文字は1と数えます))
28 空白行の正規表現: ns*r (空白行の削除に使用可能)
29 HTMLタグの正規表現: < ;(S*?)[^>]*>? |<.* /> (インターネット上で流通しているバージョンは部分的にしか有効ではありません)複雑なネストされたタグにはまだ無力です)
30 先頭および末尾の空白文字の正規表現: ^s *|s*$ または (^s*)|(s*$) (空白文字を削除するために使用できます)行頭と行末 (スペース、タブ、フォーム フィードなどを含む)、非常に便利な式)
31 Tencent QQ 番号: [1-9][0-9]{4,} (Tencent QQ 番号は 10000 から始まります) )
32 中国の郵便番号: [1-9]d{5}(?!d) (中国の郵便番号は 6 桁です)
33 IP アドレス: d+.d+.d+.d+ (IP アドレスを抽出するときに便利です)

PHP 正規表現処理関数

1. int preg_match ( string pattern, string subject [, arraymatches [, int flags]] )

使用法:

1) pattern で指定された正規表現に一致するコンテンツを対象の文字列で検索します。 。

2) 一致するものが提供された場合は、検索結果が表示されます。 $matches[0] にはパターン全体に一致するテキストが含まれ、$matches[1] には括弧内の最初にキャプチャされたサブパターンに一致するテキストが含まれます。

3) flags パラメータは PHP 4.3.0 以降で使用できます。 flags には次のタグを使用できます: PREG_OFFSET_CAPTURE
このタグが設定されている場合、各一致結果に関連付けられた文字列オフセットも返されます。これにより、返される配列の値が変更され、配列内の各セルも配列になります。最初の項目は一致した文字列で、2 番目の項目はそのオフセットになります。

たとえば、次の例は URL に一致します

1

2

3

4

5

6

7

8

9

10

11

12

13

14

$str="これは通常のテーブル https://www.baidu.com 式マッチング関数";

$url="/(https?|ftps?)://((www|mail|news).([^ ./ ]+).(com|org|net))/i";

if(preg_match($url, $str, $arr)){

echo "文字列";

}else{

echo "文字列に URL は含まれていません";

}

2. int preg_match_all ( string pattern, string subject [, arraymatches [, int flags]] )

は preg_match_all とまったく同じですが、すべての情報に一致します。

たとえば、次の例は、正規表現

1

2

3

4

に一致するすべてのコンテンツと一致します。 5

6

7

8

9

10

11

12

13

14

15

16

17

1 8

19

20

21

22

23

$str="これは、通常のテーブルの式のマッチング関数です https://www.baidu.com

これは、通常のテーブルの式のマッチング関数です http://www.baidu1.com

これは正規表現テーブル https://mail.baidu2.com 式マッチング関数

これは通常のテーブル https://news.baidu3.com 式マッチング関数

これは通常のテーブル https://www.baidu4 です。 org 式マッチング関数

これは通常のテーブルです https://www.baidu5.net 式マッチング関数

これは通常のテーブル ftps://www.baidu6.com 式マッチング関数

これは次のマッチング関数です通常のテーブル ftp://www.google7.com 式

これは通常のテーブル https://www.baidu7.net 式

";

$url= "/(https?|ftps ?)://((www|mail|news).([^./]+).(com|org|net))/i";

if(preg_match_all( $url, $str, $ arr)){

echo "この文字列には正しい URL 情報が含まれています
"

print_r($arr);

echo "ホスト: ".$arr[2]."
";

}else{

echo "この文字列には URL が含まれません";

上記の $arr の出力結果は、次々にマッチングした結果を分割していません。つまり、すべてのサブパターンが配列に書き込まれ、結果が別の配列に分割されていません。

結果では、0 番目の配列にはすべての完全なパターンが含まれ、最初の配列には最初のすべてのサブパターンが含まれます。

上記のコードを変更して、結果を個別に表示することができます。

1

2

3

4

5

6

7

8

9

10

11

if(preg_match_all ($url, $str, $arr,PREG_SET_ORDER)){

echo "文字列には正しい URL 情報があります
";

echo '

'; '
';

echo "ホスト: ".$arr[2]."
";

}else{

echo "この文字列には URL が含まれません";上記の preg_match_all メソッドでは、4 番目のパラメーターが PREG_SET_ORDER に渡され、完全なパターンとサブパターンのそれぞれを個別に表示します。

実際、デフォルト モードのパラメータは PREG_PATTERN_ORDER です。このパラメータを渡すことは、パラメータを渡さないことと同じです。

3.mixed preg_replace(mixed pattern,mixed replace,mixed subject [,int limit])

Replacement関数、patternは正規表現、replacementは置換される内容、つまり一致する内容と一致します。正規表現 Replacement は置換、件名は検索文字列です。つまり、この文字列の内容が置き換えられます。

1

2

3

4

5

$str=" 文字列内の PHP 置換関数、システムによって提供される文字列内の置換関数、置換システムが提供する文字列の関数、システムが提供する文字列の置換関数、システムが提供するランプ文字列の置換関数、システムが提供する文字列の置換関数 php";

echo $str."
";

echo preg_replace("/[a-zA-z]+/",'',$str);

このプログラムを実行すると、str 文字列内の文字は何も置き換えられません。

さらに、4 番目のパラメータである置換の数を指定できます

1

2

3

4

5

$str= " 文字 php の文字列内の置換関数、システムが提供する文字列の置換関数、システムが提供する文字列の置換関数、システムが提供する文字列の置換関数、文字内の置換関数システムが提供する文字列、システム php が提供する文字列の置換関数";

echo $str."
";

echo preg_replace("/[a-zA-z]+/ ",",$ str,3);

このようにして実現できる置換は 3 つだけです。

さらに、

1

2

3

4 などの、より一般的な方法である多対多の配列置換を実装することもできます。

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

$str=" php の文字列内の置換関数、システムが提供する文字列の置換関数、システムが提供する文字列の置換関数、システムが提供する文字列の置換関数、システムが提供する文字列の置換関数、[b] システム PHP が提供する文字列の置換関数 [/b]、システム PHP が提供する文字列の置換関数、提供される文字列の置換関数システムによって提供される文字列 apache の置換関数、システムによって提供される [u]mysql 文字列の置換関数[/u]、システムが提供する文字列 Apache、システム php システムが提供する文字列の [i] 置換関数 [/i]、システムが提供する [size=7] 文字列の php 置換関数 [/size]、および[color=Magenta] システムによって提供される Linux 文字列 [/color] mysql 関数、システムによって提供される文字列の置換関数、PHP によって提供される文字列の置換関数、システムによって提供される文字列の置換関数、によって提供される文字列の置換関数システム PHP、システムが提供する単語 [align=center] ] 文字列 [b] システムが提供する文字列内の置換関数 [/align] php [/b]、システム [b] システムが提供する文字列内php [/b] システムによって提供される文字列内 php システムによって提供される置換関数 ";

echo $str."
";

$ubbcodes=array(

'/ [b](.*?)[/b]/i ',

'/[u](.*?)[/u]/i',

'/[i](.*?)[/ i]/i',

'/[color=( .*?)](.*?)[/color]/',

'/[size=(.*?)](.*?)[ /size]/',

'/[align=( .*?)](.*?)[/align]/'

$htmls=array(

' 1'、

' 1'、

'1'、

'2< /font>'、

'2'、

'

2

'

);

echo preg_replace($ubbcodes,$htmls,$str) ;

上記は角括弧タグを HTML タグに変換するために使用できます。

正規表現関数に関しては、基本的にはこれら 3 つをマスターすれば十分です。その他には、PHP の文字列を使用して直接分割できる正規表現分割関数があります。ここでは説明しません。

この記事の概要

この記事では、PHP の正規表現の関連構文と正規表現一致関数を紹介します。上記はすべて、PHP の正規表現に関連する内容です。

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