ホームページ バックエンド開発 PHPチュートリアル php_PHP チュートリアルの正規表現のサブパターンの詳細な説明

php_PHP チュートリアルの正規表現のサブパターンの詳細な説明

Jul 13, 2016 am 10:56 AM
php について 記事 持っている モデル 通常 表現 詳しい説明 必要

この記事では、PHP の正規表現のサブパターンについて詳しく説明しています。PHP の正規表現のサブパターンを知りたい人は参照してください。

機能
混合 preg_replace (混合パターン、混合置換、混合主語 [, int 制限])

特徴
パターンに一致するサブジェクトを検索し、それを置換に置き換えます。 limit が指定されている場合は、limit の一致のみが置き換えられます。limit が省略されている場合、または値が -1 の場合は、すべての一致が置き換えられます。
Replacement には、n または $n の形式で逆参照を含めることができます。n は 0 から 99 までの値を指定できます。n は、パターンの n 番目のサブパターンに一致するテキストを表します。

サブモード

$pattern パラメータの括弧で囲まれた正規表現。サブパターンの数は、左から右への括弧の数です。 (パターンはパターンです)

まず、PHP コードの一部を見てみましょう:

コードは次のとおりですコードをコピー表示結果:
$time = date ("Y-m-d H:i:s");
$pattern = "/d{4}-d{2}-d{2} d{2}:d{2}:d{2}/i"; If(preg_match($pattern,$time,$arr)){
echo "
";<br>
プリント_r($arr);
echo "
";
}
?>



配列

(

[0] => 2012-06-23 03:08:45

) 表示された結果には、一致パターンに一致する時刻形式のデータが 1 つだけ含まれていることに気づきましたか? では、レコードが 1 つしかない場合、なぜそれを配列に保存する必要があるのでしょうか?直接文字列として保存した方が良いのではないでしょうか?

この質問では、正規表現のサブパターンを見てみましょう。

正規表現では、「(」と「)」を使用してパターン内の部分文字列を囲み、サブパターンを形成できます。全体として考えると、サブパターンは 1 つの文字に相当します。

たとえば、上記のコードを少し変更して次のように変更します。

コードは次のとおりですコードをコピー $time = date ("Y-m-d H:i:s");
$pattern = "/(d{4})-(d{2})-(d{2}) (d{2}):(d{2}):(d{2})/i"; If(preg_match($pattern,$time,$arr)){
echo "
";<br>
プリント_r($arr);
echo "
";
}
?>



注: $pattern を変更し、一致するパターンで括弧 () を使用しただけです

実行結果:


配列
(
[0] => 2012-06-23 03:19:23
[1] => 2012年
[2] =>06
[3] => 23
[4] =>03
[5] => 19
[6] => 23
)
概要: 括弧を使用して、一致するパターン全体をグループ化できます。デフォルトでは、各グループには、グループの左括弧がマークとして、最初に表示されるグループ番号が自動的に付けられます。最初のグループはグループ番号 1、2 番目のグループはグループ番号 2 などとなります。このうち、グループ 0 が正規表現全体に相当します。正規一致パターン全体がグループ化された後、さらに「後方参照」を使用して、前のグループに一致するテキストを繰り返し検索できます。例: 1 はグループ 1 に一致するテキストを表し、2 はグループ 2 に一致するテキストを表します。以下のようにコードをさらに変更できます:

注:

二重引用符で囲まれているため、グループ化を使用する場合は 2 つのバックスラッシュを使用する必要があります (例: 1)。一重引用符で囲まれている場合は、次のようなバックスラッシュを 1 つだけ使用してください: 1
1 はグループ 1 のコンテンツをキャプチャするために使用されます: 2012, 6 はグループ 6 のコンテンツをキャプチャするために使用されます
実行結果:


$time の形式は次のとおりです: 2012-06-23 03:30:31
置き換えられた形式は次のとおりです: June 23, 2012 03:30:31
配列
(
[0] => 2012-06-23 03:30:31
[1] => 2012年
[2] =>06
[3] => 23
[4] =>03
[5] => 30
[6] => 31
)

高度な正規表現

POSIX BRE と ERE に加えて、libutilitis は TCL 8.2 と互換性のある高度な正規表現言語もサポートします
法律(ARE)。 ARE モードは、stRegEx パラメータに接頭辞「***:」を追加することで有効にできます。この接頭辞は
をカバーします。 カバー b拡張オプション。基本的に、ARE は ERE のスーパーセットです。 ERE
に基づいて以下のステップを実行します。 拡張子:

1. 「遅延マッチング」 (「非貪欲マッチング」または「最短マッチング」とも呼ばれます) をサポートします: '?'、'*'、'+' または '{m,n}' で
の後に「?」記号を追加すると、条件が満たされた場合に正規表現句が一致するように最短一致を有効にすることができます
できるだけ少ない文字と一致します (デフォルトでは、できるだけ多くの文字が一致します)。例: 「a.*b」を「abab」に適用します
「a.*?b」を使用すると、文字列全体 (「abab」) と一致します。「a.*?b」を使用した場合は、最初の 2 文字 (「ab」) のみと一致します。

2. 部分式の前方参照マッチングをサポート: stRegEx では、「n」を使用して以前に定義された前方参照を行うことができます
部分式。たとえば、「(a.*)1」は「abcabc」などと一致します。

3. 名前のない部分式: "(?:expression)" を使用して名前のない式を作成します。 名前のない式は
を返しません。 「n」一致にします。

4. 前方予測: 一致するには、指定された条件が前方に満たされる必要があります。 前向き予測はポジティブ予測とネガティブ予測に分かれます
2種類あります。肯定的な予測の構文は次のとおりです: "(?=expression)"、例: "bai.*(?=yang)" は "bai yang" と一致します
の最初の 4 文字 (「bai」) ですが、一致する場合、文字列には「bai.*」の後に「yang」.
が含まれていることを確認してください。 否定判定の構文は「(?!式)」です。例: 「bai.*(?!yang)」は「bai shan」の最初の
と一致します。 4 文字ですが、照合の際、文字列内の「bai.*」の後に「yang」が出現しないことが保証されます。

5. サポートモード切り替えプレフィックス「***:」の後に「(?パターン文字列)」の形式のパターン文字列を続けることができます。パターン
文字列は、後続の式のセマンティクスと動作に影響を与えます。パターン文字列には、次の文字を組み合わせることができます:

b - POSIX BRE モードに切り替え、bExtended オプションをオーバーライドします。
e - POSIX ERE モードに切り替えて、bExtended オプションをオーバーライドします。
q - テキスト リテラル マッチング モードに切り替え、式内の文字がテキストとして検索され、すべての正規表現がキャンセルされます
セマンティクス。このモードでは、通常のマッチングが単純な文字列検索に縮小されます。 「***=」プレフィックスはそのショートカット表現です
メソッド、意味: 「***=」は「***:(?q)」と同等です。

c - 大文字と小文字を区別したマッチングを実行し、bNoCase オプションをオーバーライドします。
i - 大文字と小文字を無視した一致を実行し、bNoCase オプションをオーバーライドします。

n - 行依存のマッチングを有効にする: '^' と '$' は行の先頭と末尾に一致し、否定セット ('[^...]') は一致しません。 改行文字と一致します。この機能は、「pw」パターン文字列と同等です。 bNewLine オプションをオーバーライドします。
m - 「n」と同じ。
p - '^' と '$' は文字列全体の先頭と末尾にのみ一致し、行 '.' および負のセットは改行には一致しません。
bNewLine オプションをオーバーライドします。
w - '^' と '$' は行の先頭と末尾に一致し、負のセットは改行に一致します。 bNewLine オプションをオーバーライドします。
s - 「^」と「$」は文字列全体の先頭と末尾にのみ一致し、行「.」は一致しません。また、負のセットは改行には一致しません。カバー
bNewLine オプションをカバーします。このモードは、ARE 状態でデフォルトで使用されます。

x - 拡張モードをオンにする: 拡張モードでは、式内の空白文字とコメント文字 '#' の後のコンテンツは無視されます
例:
@code@
(?x)
s+ ([[:graph:]]+) # 最初の数字
s+ ([[:graph:]]+) # 2 番目の数値
@code@
「s+([[:graph:]]+)s+([[:graph:]]+)」と同等。
T -空白とメモの内容を無視せずに拡張モードを閉じます。このモードは、ARE 状態でデフォルトで使用されます。

6. BRE/ERE モードとは異なる Perl スタイルの文字クラスのエスケープ シーケンス:

perl クラスと同等の POSIX 式の説明
-------------------------------------------------- ------------------------
リングキャラクター
A - 現在のパターンが何であっても、文字列全体の先頭のみが一致します
b - バックスペース文字 ('x08')
B - エスケープ文字自体 ('')
cX - 制御記号-X (= X & 037)
d ? d [^[:digit:]] e - 終了文字 ('x1B')
f - フォーム フィード ('x0C')
m [[:<:]] 単語の開始位置
m [[:&gt;:]] n - 改行文字 ('x0A')
r - 復帰文字 ('x0D')
s [[:space:]] [[:space:]] s [^[:space:]] t - タブ文字 ('x09')
uX - 16 ビット UNICODE 文字 (X∈[0000 .. FFFF])
UX - 32 ビット UNICODE 文字 (X∈[00000000 .. FFFFFFFF])
v - 垂直タブ文字 ('x0B')
w [[:alnum:]_] 単語を構成する文字
W [^[:alnum:]_] 単語以外の文字
xX - 8 ビット文字 (X∈[00 .. FF])
y - 単語境界 (m または M)
Y - 非単語境界
Z - 現在のモードに関係なく、文字列の最後の部分のみが一致します
- NULL、空文字
X - 部分式の前方参照 (X∈[1 .. 9])
XX - 部分式の前方参照、または 8 進表記の 8 文字
XXX - 部分式の前方参照、または 8 進表記の 8 文字

コードは次のとおりです コードをコピー
$time = date ("Y-m-d H:i:s");
$pattern = "/(d{4})-(d{2})-(d{2}) (d{2}):(d{2}):(d{2})/i";
$replacement = "$time の形式は次のとおりです: $0
置き換えられた形式は次のとおりです: 1 年 2 月 3 日 4 時間 5 分 6 秒";
print preg_replace($pattern, $replacement, $time);
If(preg_match($pattern,$time,$arr)){
echo "
";<br>
print_r($arr);
echo "
";
}
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632203.html技術記事この記事では、PHP の正規表現のサブパターンについて詳しく説明しています。PHP の正規表現のサブパターンを知りたい人は参照してください。 関数mixed preg_replace (混合パターン,...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles