ホームページ バックエンド開発 PHPチュートリアル POSIX スタイルと互換性のある Perl スタイルの正規表現の 2 つの主要な関数の類似点 (preg_match、preg_replace、_PHP チュートリアル)

POSIX スタイルと互換性のある Perl スタイルの正規表現の 2 つの主要な関数の類似点 (preg_match、preg_replace、_PHP チュートリアル)

Jul 21, 2016 pm 03:33 PM
e match perl posix replace 主要 互換性がある 関数 そして 通常 表現 スタイル

まず、POSIX スタイルの正規表現の 2 つの主要な関数を見てみましょう:

ereg 関数: (正規表現のマッチング)

形式: int ereg ( string pattern, string string [, array ®s] )
注: 使用Perl との互換性 正規表現構文の preg_match() 関数は、多くの場合、ereg() のより高速な代替手段です。 (一般的に言えば、preg_match() を使用する方が良いです。その方が良いです~~)

大文字と小文字を区別して、文字列内の指定された正規表現パターンに一致する部分文字列を検索します。 pattern の括弧で囲まれたサブパターンに一致する部分文字列が見つかり、関数呼び出しに 3 番目の引数 regs が指定されている場合、一致は regs 配列に格納されます。 $regs[1] には最初の左括弧で始まる部分文字列が含まれ、$regs[2] には 2 番目の部分文字列が含まれます。 $regs[0] には、一致した文字列全体が含まれます。

戻り値: 文字列内でパターン pattern の一致が見つかった場合は、一致した文字列の長さが返されます。一致が見つからない場合、またはエラーが発生した場合は、FALSE が返されます。オプションのパラメータ regs が渡されない場合、または一致した文字列の長さが 0 の場合、この関数は 1 を返します。

ereg() 関数の例を見てみましょう:

次のコード スニペットは ISO 形式 (YYYY-MM-DD) の日付を受け入れ、DD.MM.YYYY 形式で表示します:

コードをコピーします コードは次のとおりです:

if (ereg ("([0-9]{4})-([0-9]{1,2})-([ 0-9]{1,2})" , $date, $regs)) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "無効です日付形式: $date";
}
? >

--------------------------------- -------------------------------------------------------- -
ereg_replace関数: (正規表現置換)

形式: string ereg_replace (文字列パターン、文字列置換、文字列文字列)
関数説明:
この関数は、文字列内のパターンに一致する部分をスキャンし、置換に置き換えます。
置換された文字列を返します。 (置換に一致するものが存在しない場合は、元の文字列が返されます。)
パターンに括弧内の部分文字列が含まれる場合、置換には \digit 形式の部分文字列が含まれる可能性があり、これらの部分文字列は最初の数個の部分文字列に置き換えられます。括弧; \0 には文字列の内容全体が含まれます。最大 9 つの部分文字列を使用できます。括弧は入れ子にすることができ、その場合は左括弧を使用して順序が計算されます。
文字列に一致するものが見つからない場合、文字列は変更されずに返されます。
この関数の例を見てみましょう:
1. 次のコード スニペットは、「This was a test」を 3 回出力します:
コードをコピーします コードは次のとおりです:

$string = "これはテストです";
echo str_replace(" は", "だった", $string);
echo ereg_replace("( )is", "\1was", $string); (( )is)" , "\2was", $string);
?>

注意すべき点は、置換パラメータに整数値を使用すると、期待した結果が得られない可能性があることです。これは、 ereg_replace() が数値を文字のシーケンス値として解釈して適用するためです。例:
2、置換パラメータが整数の場合の例:

コードをコピー コードは次のとおりです:
/* 期待した結果を生成できません*/
$num = 4;
$ string = "この文字列には 4 つの単語があります。";
$string = ereg_replace('four', $num, $string); /* 出力: 'この文字列には単語があります。'
/* この例は正常に動作します*/
$num = '4';
$string = "この文字列には 4 つの単語があります。"; string; /* 出力: 'この文字列には 4 つの単語があります。' */
?>


3、URL をハイパーリンクに置き換えます:


コードは次のとおりです:
$ text = ereg_replace("[[: alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "\0 ", $text);
ヒント: preg_replace() 関数は Perl 互換の正規表現構文を使用し、多くの場合 ereg_replace() のより高速な代替手段です。
正規表現と互換性のある Perl の 2 つの主な関数を見てみましょう:
preg_match 関数: (正規表現のマッチング)
形式: int preg_match (文字列パターン、文字列サブジェクト [、配列一致 [、int フラグ]])
機能の説明:
件名文字列のパターンで指定された正規表現に一致するコンテンツを検索します。
一致が提供された場合は、検索結果が入力されます。 $matches[0] にはパターン全体に一致するテキストが含まれ、$matches[1] には括弧内の最初にキャプチャされたサブパターンに一致するテキストが含まれます。
flags には次のフラグを指定できます:
PREG_OFFSET_CAPTURE
このフラグが設定されている場合、各一致結果に関連付けられた文字列オフセットも返されます。これにより、返された配列の値が変更され、その中の各セルも配列になることに注意してください。最初の項目は一致した文字列で、2 番目の項目はそのオフセットです。このタグは PHP 4.3.0 以降で使用できます。
flags パラメータは PHP 4.3.0 以降で利用可能です。
preg_match() はパターンが一致した回数を返します。 preg_match() は最初の一致後に検索を停止するため、0 回 (一致なし) または 1 回のいずれかになります。逆に、preg_match_all() は件名の終わりまで検索します。エラーが発生した場合、preg_match() は FALSE を返します。
ヒント: 文字列が別の文字列に含まれているかどうかを確認したいだけの場合は、preg_match() を使用しないでください。代わりに、はるかに高速な strpos() または strstr() を使用できます。
その例を見てみましょう:
例 1. テキスト内で「php」を検索します:
コードをコピーします コードは次のとおりです:

//"i afterパターン区切り文字 " 大文字と小文字を区別しない検索を表します
if (preg_match ("/php/i", "PHP は選択した Web スクリプト言語です。")) {
print "一致が見つかりました。";
} else {
print "一致するものが見つかりませんでした。";
}
?> の b は単語の境界を表すため、独立した "web" 単語のみが一致します。
* ただし、"webbing" または "cobweb" の一部は一致しません。 */
if (preg_match ("/bwebb/i" , "PHP は最適な Web スクリプト言語です。")) {
print "一致するものが見つかりました。";
} else {
print "一致するものが見つかりませんでした。 ."; } if (preg_match ("/bwebb /i", "PHP は Web サイトのスクリプト言語です。")) { print "一致が見つかりました。"; } else {
print "一致見つかりませんでした。";
}
?>


例 3. URL からドメイン名を取得します:



コードをコピーします

コードは次のとおりです:


/ / URLからホスト名を取得
preg_match("/^(http://) ?([^/]+)/i",
"http://www.php.net/index.html", $ matches);
$host = $matches[2];
// ホスト名から次の 2 つの段落を取得します
preg_match("/[^./]+.[^./]+$/", $host, $matches); echo "ドメイン名: {$matches[0]}n"; この例は次のように出力します:
ドメイン名: php.net
----- ------------------------ ------------------------ ------------------------ ----
preg_replace関数:(正規表現による検索と置換を行う)
形式:mixed preg_replace(混合パターン、混合) replace,mixed subject [, int limit])
機能説明:
件名内のパターン pattern を検索 置換で一致して置換します。 limit が指定されている場合は、limit の一致のみが置き換えられます。limit が省略されている場合、または値が -1 の場合は、すべての一致が置き換えられます。
replacement には、\n 形式または (PHP 4.0.4 以降) $n 形式の後方参照を含めることができます。後者の方が優先されます。このような各参照は、n 番目にキャプチャされた括弧で囲まれたサブパターンに一致するテキストに置き換えられます。 n は 0 ~ 99 の値で、\0 または $0 はパターン全体と一致するテキストを指します。左かっこを左から右に数えて (1 から開始)、サブパターンの数を取得します。
後方参照の後に数字が続く置換パターン (つまり、一致するパターンの直後に数字) の場合、後方参照を表すために使い慣れた \1 表記を使用することはできません。たとえば、\11 を指定すると、preg_replace() は、\1 の後に数値 1 が続く後方参照を必要とするのか、それとも \11 の後方参照を必要とするのか混乱します。この場合の解決策は、${1}1 を使用することです。これにより、$1 の分離された後方参照が作成され、他の 1 は単なるリテラルとして残ります。
その例を見てみましょう:
例 1. 逆参照の後に数字を使用する方法:


コードをコピーします

コードは次のとおりです:

$string = "2003 年 4 月 15 日";
$pattern = "/(w+) (d+), (d+)/i"; ;
print preg_replace($pattern, $replacement, $string);
/* 出力
======
April1,2003
?> 一致するものが見つかった場合は、それが返されます。置換された件名、そうでない場合は元の変更されていない件名が返されます。
preg_replace() のすべてのパラメータ (limit を除く) は配列にすることができます。 pattern と replace の両方が配列の場合、それらのキーは配列内に出現する順序で処理されます。これは、インデックスの番号順と必ずしも同じではありません。どのパターンをどの置換で置き換えるかを識別するためにインデックスを使用する場合、preg_replace() を呼び出す前に配列を ksort() でソートする必要があります。
例 2. preg_replace() でインデックス配列を使用する:


コードをコピー

コードは次のとおりです:
$string = "The Quick Brown Fox Jumped Over the Lazy Dog."; $パターン[0] = "/クイック/";
$パターン[1] = "/ブラウン/";
$replacements[2] = "クマ";
$replacements[1] = "黒";
$replacements[0] = "遅い";
print preg_replace($patterns, $replacements, $string);
/* 出力
======黒は怠惰な犬を飛び越えました
*/
/* パターンと置換を行うことで、
欲しいものを得ることができます。 */
ksort($patterns)
print preg_replace($patterns); , $ replaces, $string);
/* 出力
======
遅いツキノワグマは怠惰な犬を飛び越えました
*/
?>


subject が配列の場合、subject 内の各要素。項目の検索と置換を実行し、配列を返します。
patternとreplacementが両方とも配列の場合、preg_replace()はsubjectを検索して置換するためにそれらから値を取り出します。置換の値がパターンの値よりも少ない場合、空の文字列が残りの置換値として使用されます。 pattern が配列で、replacement が文字列である場合、この文字列は pattern の各値の置換値として使用されます。その逆は無意味です。
/e 修飾子により、 preg_replace() は置換引数を PHP コードとして処理します (適切な後方参照が置換された後)。ヒント: 置換によって有効な PHP コード文字列が形成されていることを確認してください。そうでない場合、PHP は preg_replace() を含む行で構文解析エラーを報告します。
例 3. いくつかの値を置き換えます:


コードをコピー

コードは次のとおりです:


$patterns = array ("/(19|20)(d{2})-( d{ 1,2})-(d{1,2})/", "/^s*{(w+)}s*=/"); $replace = array ("\3/\4/ \1 \2", "$\1 ="); print preg_replace ($patterns, $replace, "{startDate} = 1999-5-27"); ?>

この例では次のように出力されます:
$startDate = 5/27/1999
例 4. /e 修飾子を使用します:



コードをコピー

コードは次のとおりです:


preg_replace ("/(]*>)/e", "'\1'.strtoupper('\2').'\3'", $html_body); ?>
これ入力文字は文字列内のすべての HTML タグが大文字になります。
例 5. HTML をテキストに変換します:



コードをコピー
コードは次のとおりです:


// $document には HTML ドキュメントが含まれている必要があります。 // この例では、HTML タグ、JavaScript コード //、および空白文字を削除します。一部の一般的な // HTML エンティティも、対応するテキストに変換されます。 $search = array ("']*?>.*?'si", // JavaScript を削除します "'<[/!]*?[^< ;>]*?>'si", // HTML タグを削除します
"'([rn])[s]+'", // 空白文字を削除します
"'&(quot|#34);'i ", // HTML エンティティを置換します
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i ",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"' &(pound|#163);'i",
"'&(copy|#169);'i",
"'(d+);'e"); // PHP コードとして実行
$replace = 配列 ("",
"",
"\1",
""",
"&",
"<",
">",
" ",
chr(161),
chr (162),
chr(163),
"chr(\1)");
$text = preg_replace ($search, $replace, $document?>)
終わり…

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322544.html技術記事まず、POSIX スタイルの正規表現の 2 つの主要な関数を見てみましょう: ereg 関数: (正規表現のマッチング) 形式: int ereg ( string pattern, string string [, array lt;?php if (...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の命名におけるパラメーターの順序に関する考慮事項 C++ 関数の命名におけるパラメーターの順序に関する考慮事項 Apr 24, 2024 pm 04:21 PM

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Apr 24, 2024 am 11:33 AM

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? May 31, 2024 am 10:32 AM

Golang の正規表現では、パイプ文字 | を使用して複数の単語または文字列を一致させ、各オプションを論理 OR 式として区切ります。例: 「fox」または「dog」に一致します: fox|dog は「quick」、「brown」または「lazy」に一致します: (quick|brown|lazy) 「Go」、「Python」または「Java」に一致します: Go| Python |Java は単語または 4 桁の郵便番号と一致します: ([a-zA

C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 Apr 21, 2024 am 10:21 AM

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

参照型を返す C++ 関数の利点は何ですか? 参照型を返す C++ 関数の利点は何ですか? Apr 20, 2024 pm 09:12 PM

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

カスタム PHP 関数と定義済み関数の違いは何ですか? カスタム PHP 関数と定義済み関数の違いは何ですか? Apr 22, 2024 pm 02:21 PM

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。

See all articles