ホームページ バックエンド開発 PHPチュートリアル posix と perl の標準正規表現の違いを解析する_PHP チュートリアル

posix と perl の標準正規表現の違いを解析する_PHP チュートリアル

Jul 21, 2016 pm 03:05 PM
perl posix そして 違い 標準 通常 略語 表現 解析する

正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用 来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本 内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由 Unix中的工具软件(例如sed和grep)普及开的。(摘自维基百科)

PHP同时使用两套正则表达式规则,一套是由电气和电子工程师 协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl Compatible Regular Expression)库提供PERL兼容正则,这是个开放源代码的软件,作者为 Philip Hazel。

使用POSIX兼容规则的函数有:
ereg_replace()
ereg()
eregi()
eregi_replace()
split()
spliti()
sql_regcase()
mb_ereg_match()
mb_ereg_replace()
mb_ereg_search_getpos()
mb_ereg_search_getregs()
mb_ereg_search_init()
mb_ereg_search_pos()
mb_ereg_search_regs()
mb_ereg_search_setpos()
mb_ereg_search()
mb_ereg()
mb_eregi_replace()
mb_eregi()
mb_regex_encoding()
mb_regex_set_options()
mb_split()

使用PERL兼容规则的函数有:
preg_grep()
preg_replace_callback()
preg_match_all()
preg_match()
preg_quote()
preg_split()
preg_replace()

定界符:

POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符

修正符:

POSIX兼容正则没有修正符。

PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误):

i (PCRE_CASELESS):
匹配时忽略大小写。

m(PCRE_MULTILINE):
当设定了此修正符,行起始(^)和行结束($)除了匹配整个字符串开头和结束外,还分别匹配其中的换行符(\n)的之后和之前。

s(PCRE_DOTALL):
如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。

x(PCRE_EXTENDED):
如果设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略。

e:
如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函数将忽略之。

A(PCRE_ANCHORED):
如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配。

D(PCRE_DOLLAR_ENDONLY):
如果设定了此修正符,模式中的行结束($)仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,也会被匹配在里面。如果设定了 m 修正符则忽略此选项。

S:
当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。

U(PCRE_UNGREEDY):
使“?”的默认匹配成为贪婪状态的。

X(PCRE_EXTRA):
模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。

u(PCRE_UTF8):
模式字符串被当成UTF-8。

逻辑区隔:
POSIX兼容正则和PERL兼容正则的逻辑区隔符号作用和使用方法完全一致:
[]:包含任选一操作的相关信息。
{}:包含匹配次数的相关信息。
():包含一个逻辑区间的相关信息,可被用来进行引用操作。
|:表示“或”,[ab]和a|b是等价的。

「[]」に関連するメタキャラクター:

メタキャラクターには 2 つの異なるセットがあります。1 つは角括弧を除くパターン内で認識され、もう 1 つは角括弧 "[]" 内で認識されます。

POSIX 互換の通常および PERL 互換の通常の "[]" および "一貫した" メタ文字:
いくつかの用途がある汎用エスケープ文字
^ 文字列の先頭と一致します
$ 文字列の末尾と一致します
?または 1
* 前に指定したタイプの 0 文字以上の文字と一致
+ 前に指定したタイプの 1 つ以上の文字と一致

POSIX 互換正規表現と PERL 互換正規表現 "[] 以外" の「一貫性のない」メタ文字:
PERL 互換正規表現は、改行文字を除く任意の文字に一致します
POSIX 互換正規表現は、任意の文字に一致します

POSIX 互換の正規表現および PERL 互換の正規表現 「[] 内」の「一貫した」メタ文字:
複数の用途があるユニバーサルエスケープ文字
^ 文字を否定しますが、それが最初の文字である場合のみ 有効
- 文字 ASCII を指定しますASCII コードを注意深く調べると、[W-c] が [WXYZ\^_`abc] と同等であることがわかります

POSIX 互換の正規表現と PERL 互換の正規表現「[]」内に「一貫性のない」メタ文字があります:
- POSIX 互換の正規表現で [a-c-e] を指定すると、エラーがスローされます。
- PERL 互換の正規表現における [a-c-e] の指定は、[a-e] と同等です。

一致の数は「{}」に関連しています:
POSIX 互換の正規表現と PERL 互換の正規表現は、一致時間の点ではまったく同じです:
{2}: 前の文字 2 と一致することを意味します回
{2,}: 前の文字と 2 回以上一致することを意味します。デフォルトは貪欲 (可能な限り) 一致します
{2,4}: 前の文字と 2 回または 4 回一致することを意味します

論理間隔は「()」に関連しています:
()で囲まれた領域は論理間隔です。論理間隔の主な機能は、いくつかの文字が出現する論理順序を反映することです。引用に使用できます(この範囲内の値を変数に参照できます)。後者の関数はかなり奇妙です:
$str = "http://www.163.com/";
// POSIX 互換の正規:
echo ereg_replace("(.+)","< a href = \1 >\1",$str);
// PERL 互換の正規:
echo preg_replace("/(.+)/","$1< ; /a>",$str);
// 2 つのリンクを表示します
?>

引用する場合、括弧は入れ子にすることができ、論理的な順序は「(」の出現順序に従って調整されます。

型一致:
POSIX 互換正規:
[:upper:]: すべての大文字と一致
[: lower:]: すべての小文字と一致
[:alpha:]: すべての文字と一致
[: alnum:]: すべての文字と数字に一致します
[:digit:]: すべての数字に一致します
[:xdigit:]: [0-9A-Fa-f] に相当するすべての 16 進文字に一致します
[:punct:]: に一致しますすべての句読点、[.,"'?!;:] と同等
[:blank:]: スペースおよび TAB と一致、[t] と同等
[:space :]: すべての空白文字と一致、[tnrfv] と同等
[:cntrl:]: ASCII 0 から 31 までのすべての制御文字と一致します。
[:graph:]: すべての印刷可能な文字と一致します。 In: [^ tnrfv]
[:print:]: すべての印刷可能な文字とスペースと一致します。以下と同等: [^tnrfv]
[.c.]: 未知の関数
[=c=]: 未知の関数
[ :<:]: 単語の先頭と一致
[:>:]: 末尾と一致一言

PERL 互換正規表現 (ここで PERL 正規表現の威力を確認できます):
アラーム、つまり BEL 文字 ('0)
cx "control-x"、x は任意の文字
eエスケープ ( '0B)
f フォームフィード ('0C)
n 改行 ('0A)
r キャリッジリターン ('0D)
t タブ ('0)
xhh 16 進数コードは hh 文字
ddd 8 進数コードが ddd である文字、またはバックリファレンス
d 任意の 10 進数
D 任意の 10 進数以外の文字
s 任意の空白文字
S 任意の非空白文字
w 任意の「単語」文字
W 任意の「非単語」文字
b 単語境界
B 非単語境界
A ターゲットの始まり (複数行モードから独立)
Z ターゲットの終わりまたは終了改行の前 (複数行モードから独立) )
z ターゲットの終わり (複数行モードから独立)
G ターゲット内で最初に一致する位置

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327658.html技術記事正規表現 (正規表現、regexp、regex、または regxp と略される) は、正規表現、正規表現、正規表現、正規化された表現、または正規表現とも呼ばれ、...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PSのエクスポートPDFのパスワード保護を設定する方法 PSのエクスポートPDFのパスワード保護を設定する方法 Apr 06, 2025 pm 04:45 PM

Photoshopでパスワードで保護されたPDFをエクスポート:画像ファイルを開きます。 [ファイル]&gtをクリックします。 「エクスポート」&gt; 「PDFとしてのエクスポート」。 「セキュリティ」オプションを設定し、同じパスワードを2回入力します。 [エクスポート]をクリックして、PDFファイルを生成します。

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

H5とミニプログラムとアプリの違い H5とミニプログラムとアプリの違い Apr 06, 2025 am 10:42 AM

H5。ミニプログラムとアプリの主な違いは次のとおりです。技術アーキテクチャ:H5はWebテクノロジーに基づいており、ミニプログラムとアプリは独立したアプリケーションです。経験と機能:H5は軽量で使いやすく、機能が限られています。ミニプログラムは軽量で、インタラクティブが良好です。アプリは強力で、スムーズな経験があります。互換性:H5はクロスプラットフォーム互換性があり、アプレットとアプリはプラットフォームによって制限されています。開発コスト:H5には、開発コストが低く、中程度のミニプログラム、最高のアプリがあります。適用可能なシナリオ:H5は情報表示に適しており、アプレットは軽量アプリケーションに適しており、アプリは複雑な機能に適しています。

Routerフォルダーの下のindex.jsファイルでvue.use(vuerouter)を呼び出す必要があるのはなぜですか? Routerフォルダーの下のindex.jsファイルでvue.use(vuerouter)を呼び出す必要があるのはなぜですか? Apr 05, 2025 pm 01:03 PM

Vueアプリケーションを開発するときに、ルーターフォルダーの下にindex.jsファイルにvuerouterを登録する必要性があるため、ルーティング構成で問題が発生することがよくあります。特別...

XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? Apr 04, 2025 pm 11:15 PM

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

さまざまなデータベースシステムに列を追加するための構文の違いは何ですか さまざまなデータベースシステムに列を追加するための構文の違いは何ですか Apr 09, 2025 pm 02:15 PM

and:mysql:Alter table_name add column_name data_type; postgresql:column column_name data_typeを変更するcolumn column_name datape; oracle:alter table_name add(column_name data_type);

LaravelとThinkPhpの違い LaravelとThinkPhpの違い Apr 18, 2025 pm 01:09 PM

LaravelとThinkPhpはどちらも人気のあるPHPフレームワークであり、開発における独自の利点と短所を持っています。この記事では、2つの深さを比較し、アーキテクチャ、機能、パフォーマンスの違いを強調して、開発者が特定のプロジェクトのニーズに基づいて情報に基づいた選択を行うのに役立ちます。

Centosでファイアウォールステータスを表示する方法 Centosでファイアウォールステータスを表示する方法 Apr 14, 2025 pm 08:18 PM

Centosファイアウォールの状態は、sudo firewall-cmd--stateコマンドを通じて表示され、ランニングまたはランニングに戻ります。詳細については、構成された領域、サービス、ポートなどを含むSudo Firewall-CMD - List-Allを使用して表示できます。FireWall-CMDが問題を解決しない場合は、sudo iptables -l -nを使用してiptablesルールを表示できます。ファイアウォール構成を変更する前に、サーバーのセキュリティを確保する前に、必ずバックアップを作成してください。

See all articles