バックスラッシュの蕓術(shù):PHPの正規(guī)表現(xiàn)で脫出キャラクターを分ける
Jul 27, 2025 am 03:18 AM- php regexでバックスラッシュをマスターするには、2つのレイヤーの解析が発生することを理解してください。PHPプロセスは最初にシーケンスをエスケープし、次にRegexエンジンが実行します。 2. regexパターンに単一の引用符を使用して、\ bのような脫出をバックスペースとして解釈することを避けます。 3。二重引用符では、バックスラッシュを2倍にします(例: "\。"リテラルドットに一致するため)。 4.読みやすさを向上させるために、#または?などの代替區(qū)切り文字をスラッシュと一致させるときに選択します。 5。preg_quote()を使用して、特別なregex文字を含むリテラル文字列を安全に一致させます。常に正しい動作を確保するために\ b、\ s、および\ wを含むエッジケースを常にテストし、単一の引用と適切な脫出により、regexの処理が予測可能かつ安全であることを覚えておいてください。
PHPで正規(guī)表現(xiàn)を操作する場合、Backslash( \
)は強力なツールであり、共通の混亂源でもあります。特殊文字を逃れ、キャラクターのクラスを定義し、メタチャラクターの開始を信號するために使用されますが、PHPストリング自體がバックスラッシュを解釈するため、それらを正しく管理するには、PHPとRegexエンジンプロセスエスケープシーケンスの両方を理解する必要があります。

絡(luò)まなくても、PHPの正規(guī)表現(xiàn)でバックスラッシュを習(xí)得する方法は次のとおりです。
1。脫出の二重層:PHP文字列対復(fù)geエンジン
PHP Regexの脫出キャラクターをマスターする鍵は、2つのレベルの解析が発生することを認識することです。

-
最初に、PHPは文字列を解析し、エスケープシーケンス(
\n
、\"
、または\\
)を解釈します。 - 第二に、結(jié)果の文字列はRegexエンジンに渡され、それはバックスラッシュの獨自の解釈を適用します。
これは、Regexエンジンに単一のバックスラッシュを送信するには、PHP文字列に2つのバックスラッシュを書く必要があることが多いことを意味します。
例:リテラルドットの一致
Regexのドット( .
)は、Newline以外のキャラクターと一致します。文字通りのドットに一致するには、バックスラッシュで逃げる必要があります: \.

しかし、PHPの二重引用文字列では、バックスラッシュ自體から逃れる必要があります。
//正しい:二重引用符で二重のバックスラッシュ preg_match( "/\\./"、 "emple.com"); // 1(一致)を返します //または単一の引用符を使用します(PHPレベルの逃げる必要はありません) preg_match( '/\\./'、 "emple.com"); //また動作します //これは間違っています - PHPは\を見ます。文字通り\。しかし、正規(guī)表現(xiàn)が得られます。 (UNESCAPED) preg_match( "/\ ./"、 "emple.com"); //機能しているように見えるかもしれませんが、危険です
bestベストプラクティス:可能であれば、正規(guī)表現(xiàn)パターンに単一の引用符を使用します。 PHPはそれらの內(nèi)部のエスケープシーケンスを解釈しないため、混亂を軽減します( \'
および\\
を除く)。
//清潔で安全 preg_match( '/\./'、$ text);
2.一般的な正規(guī)表現(xiàn)とそのPHP処理
一般的なregexメタチャラクターとPHPで正しく処理する方法は次のとおりです。
あなたが欲しいもの | 正規(guī)表現(xiàn)構(gòu)文 | PHP二重引用符 | PHP単一引用符 |
---|---|---|---|
リテラルドット. | \. | "\\." | '\\.' |
単語の境界 | \b | "\\b" | '\\b' (注: \b はPHPのバックスペースです?。?/em> |
桁\d | \d | "\\d" | '\\d' |
Whitespace \s | \s | "\\s" | '\\s' |
リテラルバックスラッシュ\ | \\ | "\\\\" | '\\\\' |
「警告:二重引用されたPHP文字列の
\b
は、単語の境界ではなく、バックスペース文字として解釈されます。これは頻繁なバグです。
//間違っている - \ bは二重引用符でバックスペースになります preg_match( "/\ bword \ b/"、$ text); //おそらく期待どおりに機能しないでしょう //正しい - バックスラッシュを逃がします preg_match( "/\\ bword \\ b/"、$ text); //より良い - 単一の引用を使用します preg_match( '/\ bword \ b/'、$ text); //清潔で安全
3.區(qū)切り文字と特殊文字
PHPのpreg_*
関數(shù)には、パターン( /pattern/
)の周りの區(qū)切り文字が必要です。パターンに區(qū)切り文字が含まれている場合は、正規(guī)表現(xiàn)で脫出するか、別の區(qū)切り文字を使用する必要があります。
例:URLをスラッシュと一致させます
//オプション1:フォワードスラッシュをエスケープします(常に必要ではありませんが、安全です) preg_match( '/https:\/\/example \ .com/'、$ url); //オプション2:別の區(qū)切り文字を使用する(例:#) preg_match( '#https:// example \ .com#'、$ url); //逃げる必要はありません /
#
、 ~
、 @
などの代替デリミターを使用すると、パターンに多くのスラッシュが含まれている場合、読みやすさを大幅に向上させることができます。
4. PHPにおけるよりクリーナー、より安全な復(fù)活のための実用的なヒント
- phpレベルの逃亡の驚きを避けるために、正規(guī)表現(xiàn)パターンに単一の引用を使用します。
- url、ファイルパス、またはHTMLを一致させるときに、
#
または~
デリミターとして使用します。 - double引用文字列を使用する場合、バックスラッシュ(
\\
)をダブルアップします。 - adistエッジケース- 特に
\b
、\s
、\w
を使用して、予想どおりに動作するようにします。 - regexメタチャラクターを含む可能性のあるリテラル文字列を一致させるときは、
preg_quote()
検討してください。
$ literal = "embles.com(v2)"; $ pattern = '/'。 preg_quote($ literal、 '/')。 '/'; preg_match($ pattern、 "Example.com(v2)Today!");
バックスラッシュはうるさいように見えるかもしれませんが、 PHPとPCREがそれぞれ1つのレベルの脫出を消費することを理解すると、予測可能になります。単一の引用に固執(zhí)し、スマートデリミターを選択し、意図的に脫出します。
基本的に、トリッキーなのは正規(guī)表現(xiàn)ではありません。PHPが舞臺裏でいつ支援している(または傷つけている)のかを知っています。
以上がバックスラッシュの蕓術(shù):PHPの正規(guī)表現(xiàn)で脫出キャラクターを分けるの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫像を無料で

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

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

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

ゼンドスタジオ 13.0.1
強力な PHP 統(tǒng)合開発環(huán)境

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

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

ホットトピック

preg_quote()backslashesandthededelimiterを含むescapesregexスペシャルチャクター、totreatthemasliterals;

Heredocは、\ n、\ t、\\、\ $などの可変補間と基本的なエスケープシーケンスを処理しますが、\ "または\ 'を処理しません。 nowdocでは、エスケートの見積もりは必要ありません。

AlwayseScapeOutusingContext-SpecificMethods:htmlspecialchars()forhtmlcontentandattributes、rawurlencode()forurls、andjson_en code()withjson_hex_tag、json_hex_apos、json_hex_quot、andjson_unescaped_unicodeforjavascript.2.usetemplatingenginesliketwig、lara

inbash、single quotestreatallcharactersliterlitivally whiledoublequoteSolowvarowvariaible expansionAndlimitedescaping; inpythonandjavascript、両方のQuotetypeshandleescapesthesame、ledicoicemainlycemainlectingivationability andconventyding bedingding beding beding beding、sousesinglequote

tomasterbackslashesinphpregex、lutledentthattwolayersofparsingocur:phpprocessesesscapesequencesfirst、theregexenginedoes;

SQL脫出は安全ではなく、SQL注入から保護されていないため、SQLエスケープの場合はaddSlashes()を避ける必要があります。 HTMLSPECIALCHARS()は、XSS攻撃を防ぐためにHTML出力に使用されます。 mysqli_real_escape_string()は、mysqlクエリでの文字列エスケープに使用できますが、事前処理ステートメントを使用できない場合は、最適ではないオプションにすぎません。 1。AddSlashes()は時代遅れで安全ではなく、最新のアプリケーションでのSQLエスケープには使用しないでください。 2。HTMLSPECIALCHARS()は、XSSを防ぐためにユーザー入力とHTMLに出力するときに使用するときに使用する必要があります。 3。mysqli_real_escape_string(

SQLインジェクション保護は、Multi-Byteエンコードを処理せず、簡単にバイパスされる有限文字のみを逃れるため、AddSlashes()に依存することはできません。プリプロセシングステートメント(PDOまたはMySQLIのパラメーター化クエリなど)を使用して、データをSQLロジックから分離して、入力がコードに解析されないことを確認する必要があります。プリプロセシングを使用できない場合は、データベース固有のエスケープ関數(shù)(Real_Escape_Stringや正しい文字セットの設(shè)定など)、識別子ホワイトリストまたは引用マークラッピング、整數(shù)入力キャスト、およびその他の方法をコンテキストに従って使用する必要があります。

backslashesgomissinginphpbecauseTheyareTreatedasescapecharactersIndouble-quotedstrings、sotofixthis:1.Usesinglequotesforl iteralpathslike'c:\ uses \ john \ documents '、2.ordoublethebackslashesindoublequotesas "c:\\ users \\\ john \\ documents"、3.prefer
