ホームページ php教程 php手册 一般的に使用される PHP 正規表現

一般的に使用される PHP 正規表現

Jun 21, 2016 am 08:51 AM
quot regex str

マインドマップ

はじめに

開発では正規表現を頻繁に使用する必要があります。現在、JavaScript、Java、.net、php などの多くの開発言語に正規表現アプリケーションがあります。今日は正規表現についての私の理解を共有します。皆さんに教えてください。不適切だったら私に言ってください!

知っておくべき用語 - 次の用語についてどの程度知っていますか?

区切り文字; 修飾子; ワイルドカード (前方参照、逆参照);

ポジショニング

正規表現を使用するのはどのような場合ですか? すべての文字操作で正規表現が使用されるわけではありません。これは実際に効率に影響します。複雑なテキスト データの解析が必要な場合は、正規表現を使用することをお勧めします。

メリット

正規表現を使用すると、複雑な文字操作を処理する際の作業効率が向上し、コードをある程度節約できます。

デメリット

正規表現を使用する場合、正規表現が複雑になるとコードが複雑になり、理解しにくくなります。そのため、正規表現内にコメントを追加する必要がある場合があります。

ユニバーサルモード

区切り文字。通常は開始と終了の区切り文字として「/」が使用されますが、「#」も使用できます。

「#」を使用するのはどのような場合ですか? 通常、文字列に「/」文字が多数含まれる場合、そのような文字は uri などの正規表現でエスケープする必要があるためです。

「/」区切り文字を使用したコードは以下の通りです。

$regex = '/^http://([w.]+)/([w]+)/([w]+).html$/i';

$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

preg_match の $matches[0] には、パターン全体に一致する文字列が含まれます。

「#」区切り文字を使用したコードは次のようになります。このとき、「/」はエスケープされません。

$regex = '#^http://([w.]+)/([w]+)/([w]+).html$#i';

$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

修飾子: 正規表現の動作を変更するために使用されます。

('/^http://([w.]+)/([w]+)/([w]+).html/i') の最後の「i」は修飾子であり、無視することを意味します。私たちがよく使うもう 1 つの文字は、スペースを無視することを意味する「x」です。

貢献コード:

$regex = '/HELLO/';

$str = 'こんにちは';

$matches = array();

if(preg_match($regex, $str, $matches)){

echo 'いいえ i:Valid Successful!',"n";

}

if(preg_match($regex.'i', $str, $matches)){

echo 'YES i:Valid Successful!',"n";

}

文字フィールド: [w] 角括弧で囲まれた部分が文字フィールドです。

修飾子: [w]{3,5}、[w]*、[w]+ など、[w] の後の記号はすべて修飾子を表します。具体的な意味をご紹介します。

{3,5} は 3 ~ 5 文字を意味します。 {3,} は 3 文字を超え、{,5} は最大 5 文字、{3} は 3 文字です。 *は0以上、+は1以上を意味します。

キャレット

文字フィールド ([^w] など) に入れて否定 (含めないという意味) を表現します - 「選択を反転」

式の前に配置すると、現在の文字から開始することを意味します。 (/^n/i、n で始まることを意味します)。

しばしば「」エスケープ文字と呼ばれることに注意してください。 「.」、「/」などの一部の特殊記号をエスケープするために使用されます

ワイルドカード (ルックアラウンド): 特定の文字列内の特定の文字の有無をアサートします。 ルックアラウンドには、先読み (前方参照 ?=) と後読み (逆引き ?<=) の 2 種類があります。

形式:

前方参照: (?!) に対応する (?=) は否定的な意味を意味します。逆引き参照: (?

に対応)

の文字が続きます

$regex = '/(? $str = 'abcdefgk';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

否定的な意味:

$regex = '/(? $str = 'abcdefgk';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

文字幅: 0

ゼロ文字コードを検証

$regex = '/HE(?=L)LO/i';

$str = 'HELLO';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果を印刷できません!

$regex = '/HE(?=L)LLO/i';

$str = 'HELLO';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果を印刷できます!

説明: (?=L) は、HE の後に L 文字が続くことを意味します。ただし、(?=L) 自体は 1 文字を占有しないため、それ自体が 1 文字を占有する (L) とは区別する必要があります。

データをキャプチャ

タイプを指定しないグループ化は、後で使用するために取得されます。

指定されたタイプはワイルドカード文字を参照します。したがって、括弧の先頭に疑問符のないもののみがキャプチャされます。

同じ式内の参照は後方参照と呼ばれます。

呼び出し形式: 番号 (1 など)。

$regex = '/^(川山家)[ws!]+1$/';

$str = '川山家、ありがとう川山家';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

データのキャプチャを避ける

形式:(?:パターン)

利点: 有効な後方参照の数が最小限に抑えられ、コードがより明確になります。

名前付きキャプチャ グループ

形式: (?P) 呼び出しメソッド (?P=グループ名)

$regex = '/(?P

川山家)[s]Is[s](?P=著者)/i';

$str = 'author:chuanshanjia chuanshanjia です';

$matches = array();

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

ランニング結果

遅延マッチング (覚えておいてください: 2 つの操作が実行されます。以下の原則部分を参照してください)

形式: 修飾子?

原則: "?": 前に修飾子がある場合、最小のデータが使用されます。たとえば、「*」は 0、「+」は 1 となります。{3,5} の場合は 3 がとられます。

まず、次の 2 つのコードを見てください:

コード 1.

$regex = '/heL*/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 1.

コード 2

$regex = '/heL*?/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 2

コード 3、「+」を使用します

$regex = '/heL+?/i';

$str = 'heLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 3

コード 4、{3,5}

を使用します

$regex = '/heL{3,10}?/i';

$str = 'heLLLLLLLLLLLLLLLL';

if(preg_match($regex, $str, $matches)){

var_dump($matches);

}

echo "n";

結果 4

正規表現に関するコメント

形式: (?# コメント内容)

使用法: 主に複雑なコメントに使用されます

貢献コード: MYSQL データベースへの接続に使用される正規表現です

$regex = '/
^host=(?

([w!@#$%^&*()_+-]+) (?#ユーザー名)

([w!@#$%^&*()_+-]+) (?#パスワード)
(?!)$/ix';

$str = 'host=192.168.10.221root123456';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

エコー「n」

元のリンク: http://www.cnblogs.com/baochuan/archive/2012/03/12/2391135.html



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PythonのRegEx正規表現の使い方 PythonのRegEx正規表現の使い方 May 19, 2023 pm 08:49 PM

RegEx または正規表現は、検索パターンを形成する一連の文字です。 RegEx を使用すると、文字列に指定した検索パターンが含まれているかどうかを確認できます。 RegEx モジュール Python には、正規表現の処理に使用できる re という組み込みパッケージが用意されています。 re モジュールをインポートします: Python の importre RegEx re モジュールをインポートしたら、正規表現の使用を開始できます: 例 文字列を取得して、それが "China" で始まり "country" で終わるかどうかを確認します: importretxt="Chinaisagreatcountry" x =re .search("^中国.*国$&

Python組み込み型strソースコード解析 Python組み込み型strソースコード解析 May 09, 2023 pm 02:16 PM

1 Unicode コンピュータ ストレージの基本単位は 8 ビットで構成されるバイトです。英語は 26 文字といくつかの記号のみで構成されているため、英語の文字はバイト単位で直接格納できます。ただし、他の言語 (中国語、日本語、韓国語など) では、文字数が多いため、エンコードに複数のバイトを使用する必要があります。コンピューター技術の普及に伴い、非ラテン文字エンコード技術は発展を続けていますが、依然として 2 つの大きな制限があります。 多言語サポートがないこと。 ある言語のエンコード スキームを別の言語で使用することはできません。また、統一された標準もありません。たとえば、中国語には GBK、GB2312、GB18030 など、多くのエンコード標準があります。エンコード方式が統一されていないため、開発者は異なるエンコード間で相互に変換する必要があり、必然的に多くのエラーが発生します。

Python の __str__ と __repr__ の類似点と相違点は何ですか? Python の __str__ と __repr__ の類似点と相違点は何ですか? Apr 29, 2023 pm 07:58 PM

__str__ と __repr__ の類似点と相違点は何ですか? 文字列の表現については誰もが知っています。Python の組み込み関数 repr() は、識別を容易にするためにオブジェクトを文字列の形式で表現できます。これが「文字列表現」です。 repr() は、特別なメソッド __repr__ を通じてオブジェクトの文字列表現を取得します。 __repr__ が実装されていない場合、ベクトルのインスタンスをコンソールに出力すると、結果の文字列が次のようになります。 >>>classExample:pass>>>print(str(Example()))>>>

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没有关问题 Jun 13, 2016 am 10:15 AM

不用数据库来实现用户的简单的下载,代码如下,但是却不能下载,请高手找下原因,文件路劲什么的没问题。

Go 言語の str の秘密を明らかにする Go 言語の str の秘密を明らかにする Mar 29, 2024 am 11:27 AM

Go 言語は、高速、簡潔、効率的なオープンソース プログラミング言語であり、プログラマーの間で人気が高まっています。 String(文字列)はプログラムでよく使われるデータ型の一つで、Go言語でも独特の処理方法を持っています。この記事では、読者が Go 言語の文字列 (str) の謎を解き明かし、具体的なコード例を通じてその使用法と特徴を分析するように導きます。文字列の定義と初期化 Go 言語では、文字列は二重引用符 "" で囲まれた一連の文字です。例: str

为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 为什么小弟我在php上写的这个代码,在浏览器上什么都不显示 Jun 13, 2016 am 10:24 AM

为什么我在php上写的这个代码,在浏览器上什么都不显示啊

写真が消える問題を解決する方法 写真が消える問題を解決する方法 Apr 07, 2024 pm 03:02 PM

写真が消える問題を解決する方法 まず、写真ファイル $file=$_FILES['userfile']; if(is_uploaded_file($file['tmp_name'])){$query=mysql_query("INSERT INTO gdb_banner() image_src) VALUES ('images/ {$file['name'

See all articles