PHP と正規表現_PHP チュートリアル
来自:swords的blog
一个正则表达式是一个特定的格式化模式,可以用来找出一个字符串在另一个字符串中的使用情况。几个编程语言,包括Visual Basic,Perl,javascript和PHP都支持正则表达式,希望在这篇入门指导的结束,Mitchell(作者自己)可以让你在PHP程序中能应用一些基本的正则表达式。正则表达式是在各种各样的程序语言中突出的古怪特征中的一种,但是由于它们看起来是很难的一个概念,所以很多开发者就把它们放到了角落里,忘记了它们的存在。
让我们先来看看什么是正则表达式,为什么你要在PHP程序中用到它们。
什么是正则表达式?
你对从一个不错的老的基于控制的文本编辑器中分离出像BBEdit和notepad的程序,有什么看法呢?两个都支持文本输入,可以让你保存文本到文件中,但是现在的文本编辑器也支持其它功能,包括查找–代替工具,这让编辑一个文本文件相当容易。
正则表达式也是相似的,只是更好一些。正则表达式可以被认为一个极其高级的查找-替换工具,让我们从痛苦中摆脱出来:不必再写定制的数据确认例子来检查电子邮件地址或者来确认电话号码的格式是正确的,如此等等。
任何程序中最普通的函数之一就是数据有效性检查,PHP捆绑了一些文本检查函数,允许我们用正则表达式匹配一个字符串,确认有一个空格,有一个问号,等等。
你不知道的可能是,正则表达式可以简单装备吗,当你掌握了一些正则表达式时(这个正则表达式可以用来告诉正则表达式引擎一个字符串中我们想要匹配的部分),你会自问为什么会把正则表达式扔到角落里这么久,^_^。
PHP有两套函数,用来处理两种类型的正则表达式:Perl5兼容模式,和Posix标准兼容模式。在这篇文章中我们将看看ereg函数,用遵照Posix标准的搜索表达式工作。虽然它们并没有Perl5模式那样强大,但是一种不错的学习正则表达式的方法。如果你对PHP支持的Perl5兼容正则表达式感兴趣,可以到PHP.net网站找一些关于preg函数的细节。
PHP有六个函数来处理正则表达式,它们都把一个正则表达式作为它们的第一个参数,列出如下:
• ereg: 最常用的正则表达式函数, ereg 允许我们搜索跟一个正则表达式匹配的一个字符串. • ereg_replace: 允许我们搜索跟正则表达式匹配的一个字符串,并用新的字符串代替所有这个表达式出现的地方。 • eregi: 和ereg几乎是一样效果,不过忽略大小写。 • eregi_replace: 和ereg_replace有着一样的搜索-替换功能,不过忽略大小写. • split: 允许我们搜索和正则表达式匹配的字符串,并且以字符串集合的方式返回匹配结果. • spliti: split函数忽略大小写的版本. |
为什么使用正则表达式?
如果你不断地建立不同的函数来检查或者操作字符串的一部分,现在你可能要放弃所有的这些函数,取而代之的用正则表达式。如果你对下列的问题都答"是的",那么你肯定要考虑使用正则表达式了:
• 你是否正在写一些定制的函数来检查表单数据(比如在电子信箱地址中的一个@,一个点)?
• 你是否写一些定制的函数,在一个字符串中循环每个字符,如果这个字符匹配了一个特定特征(比如它是大写的,或者它是一个空格),那么就替换它?
除了是令人不舒服的字符串检查和操作方法,如果没有有效率地写代码,上述的两条也会使你的程序慢下来。你是否更倾向于用下面的代码检查一个电子信箱地址呢:
function validateEmail($email) { $hasAtSymbol = strpos($email, "@"); $hasDot = strpos($email, "."); if($hasAtSymbol && $hasDot) return true; else return false; } echo validateEmail("mitchell@devarticles.com"); ?> ... 或者使用下面的代码: function validateEmail($email) { return ereg("^[a-zA-Z]+@[a-zA-Z]+.[a-zA-Z]+$", $email); } echo validateEmail("mitchell@devarticles.com"); ?> |
可以肯定的是,第一个函数比较容易,而且看起来结构也不错。但是如果我们用上面的下一个版本的email地址检查函数不是更容易吗?
上面展示的第二个函数只用了正则表达式,包括了对ereg函数的一个调用。Ereg 函数返回true或者false,来声明它的字符串参数是否和正则表达式相匹配。
很多编程者避开正则表达式,只因为它们(在一些情况下)比其它的文本处理方法更慢。正则表达式可能慢的原因是因为它们涉及把字符串在内存中拷贝和粘贴,因为正则表达式的每一个新的部分都对应匹配一个字符串。但是,从我对正则表达式的经验来说,除非你在文本中几百个行运行一个复杂的正则表达式,否则性能上的缺陷都可以忽略不计,当把正则表达式作为输入数据检查工具时,也很少出现这种情况。
正则表达式语法
在你可以匹配一个字符串到正则表达式之前,你必须先建立正则表达式。开始的时候,正则表达式的语法有点古怪,表达式中的每一个短语代表某个类型的搜索特征。下列是一些最普通的正则表达式,也都对应着一个如何使用它的例子:
字符串头部
搜索一个字符串的头部,用^,例如
|
将返回 true, 但是
|
将返回 false, 因为hello不在字符串"I say hello world"的头部。
字符串尾部
搜索字符串尾部,用$,例如:
|
将返回true, 但是
|
将返回 false,因为bye不在字符串"goodbye my friend"的尾部.
任意的单个字符
搜索任意字符,用点(.),例如:
|
将返回true,但是
|
将返回false,因为我们的要搜索字符串没有包含字符。你可以用花括号随意告诉正则表达式引擎它要匹配多少个单个字符。如果我只想匹配5个字符,我可以这样用ereg:
|
上面的这段代码告诉正则表达式引擎当且仅当至少5个连续的字符出现字符串的尾部时返回true.我们也可以限制连续出现的字符的数目:
|
上記の例では、正規表現エンジンに、式に一致する検索文字列の末尾に 1 ~ 3 個の「a」文字が必要であることを伝えています。
上記の例では、検索文字列に「a」文字が 3 つありますが、それらは文字列内にありません。しっぽ。 $ に一致する末尾の文字列を正規表現から削除すると、文字列は一致します。
また、正規表現エンジンに、行内の少なくとも特定の数の文字と一致するように指示することもできます。存在する場合はそれ以上の文字と一致します。 これを実行できます:
ゼロ個以上の繰り返し文字
文字が存在するか、または繰り返される可能性があるかを正規表現エンジンに通知します。 , *文字を使用します。ここの例はどちらも true を返します。 2 番目の例に文字「t」が含まれていない場合でも、* は文字が出現してもよいが、出現する必要はないことを示すため、true が返されます。実際、通常の文字列パターンでは、t 文字がオプションであるため、上記の ereg 呼び出しは true を返します。
文字を 1 回以上繰り返します
文字が存在する必要があることを正規表現エンジンに伝えるために、次のようにすることもできます。複数回繰り返す場合は、
次の例も true を返します。
0 個または 1 つの繰り返し文字
文字が 1 回だけ存在するか、存在しないかのいずれかであることを正規表現エンジンに伝えることもできます。これを行うには、
正規表現構文 (続き)
スペース文字
検索文字列内のスペース文字と一致するには、事前定義された Posix を使用します
http://www.bkjia.com/PHPjc/532679.html
www.bkjia.com

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

IISとPHPは互換性があり、FastCGIを通じて実装されています。 1..phpファイル要求を構成ファイルを介してFastCGIモジュールに転送します。 2. FASTCGIモジュールは、PHPプロセスを開始して、パフォーマンスと安定性を改善するための要求を処理します。 3。実際のアプリケーションでは、構成の詳細、エラーデバッグ、パフォーマンスの最適化に注意する必要があります。

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

AIは、作曲家の使用を最適化するのに役立ちます。特定の方法には次のものが含まれます。1。依存関係管理の最適化:AIは依存関係を分析し、最適なバージョンの組み合わせを推奨し、競合を減らします。 2。自動コード生成:AIは、ベストプラクティスに準拠したComposer.jsonファイルを生成します。 3.コードの品質を改善する:AIは潜在的な問題を検出し、最適化の提案を提供し、コードの品質を向上させます。これらの方法は、開発者が効率とコードの品質を向上させるのに役立つ機械学習および自然言語処理技術を通じて実装されています。

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

Typetraitsは、Cでコンパイル時間タイプのチェックと操作に使用され、コードの柔軟性とタイプの安全性が向上します。 1)タイプの判断は、STD :: iS_integralおよびstd :: is_floating_pointを介して実行され、効率的なタイプチェックと出力を達成します。 2)std :: is_triviely_copyableを使用して、ベクトルコピーを最適化し、タイプに従って異なるコピー戦略を選択します。 3)コンパイル時間の意思決定、タイプの安全性、パフォーマンスの最適化、コードの複雑さに注意してください。タイプトライトの合理的な使用は、コードの品質を大幅に改善できます。
