複雑な文字列アサーションの見た目と見た目を習得します
肯定的なアサーション(?= ...)、否定的なアサーション(?!...)、肯定的な後方アサーション(?
LookaheadsとLookbehindsは、 LookAround Assertionsとしても知られていますが、文字列の前または後にキャラクターを消費せずにパターンに合わせてパターンに合わせることができる強力なツールです。それらは、マッチを正確に保ちながら複雑な文字列条件を実施する必要がある場合に不可欠です。それらを習得する方法は次のとおりです。

lookaheadsとlookbehindsとは何ですか?
彼らの核心では、lookeheadsとlookbehindsはゼロ幅の主張です。つまり、彼らはパターンをチェックしますが、結果に一致したテキストを含めないことを意味します。彼らは、特定の位置で条件が真であるかどうかのみを主張します。
4つの主なタイプがあります。

-
ポジティブルックヘッド:
(?=...)
- パターンに合わせて次のことを保証します。 -
ネガティブルックヘッド:
(?!...)
- パターンと一致しないことを保証します。 -
ポジティブルックベヒンド:
(? - 先行するものがパターンに一致するものを保証します。
-
ネガティブルックベヒンド:
(? - 先行するものがパターンと一致<em>しない</em>ものを保証します。
これらは、コンテキストに基づいてテキストを抽出または検証する場合に特に便利です。
ポジティブおよびネガティブルックヘッドを使用します
Lookaheadsは、最も一般的に使用されるLookAroundsです。彼らはあなたに「Xが続く場合にのみXを一致させる」と言います。

たとえば、すぐにコンマが続くすべての単語を見つけたいと仮定しますが、コンマではなく、単語だけが必要です。
\ w(?=、)
これは(?=,)
hello
In hello, world
に一致します。
パスワードの検証の場合:パスワードに少なくとも1桁、1つの特別な文字が含まれ、少なくとも8文字の長さが含まれていることを確認することができます。スタートに固定された複数のLookaheadsを使用できます。
^(?=。*\ d)(?=。*[!@#$%^&*])(?=。*[az])(?=。*[az])
それを分解する:
-
^
- 文字列の開始 (?=.*\d)
- 少なくとも1桁(?=.*[!@#$%^&*])
- 少なくとも1つの特殊文字(?=.*[az])
- 少なくとも1つの小文字(?=.*[AZ])
- 少なくとも1つの大文字.{8,}
- 少なくとも8文字$
- 文字列の終わり
各Lookaheadは最初から始まり( ^
)、条件を検証するために先にスキャンします。それらのどれもキャラクターを消費しないので、ファイナル.{8,}
実際のマッチングを行います。
Lookbehindsで作業します
lookbehinds現在の位置の前に来るものをチェックします。すべてのRegexエンジンが可変長いルックベインドをサポートしているわけではありませんが、最新のエンジン(JavaScript、 regex
モジュール付きのPython、または.NETなど)は、可変長さのパターンが限られているためです。
ドル標識の後に来る価格を抽出したいとします。
(?<= \ $)\ d \。\ d {2}
これは19.99
ドルで$19.99
で一致します。これは、lookbehind (?<=\$)
数の前に$
が保証されるためです。
さて、マイナスの符号(つまり、明示的にマークされていない正の数字)が先行しない数字を見つけたいとします。
(?<! - )\ b \ d \ b
これにより、 -42
一致が回避されますが、 profit: 42
の42
と一致します。
注: \b
単語の境界であり、多数または識別子の一部と一致しないようにします。
ルックアラウンドを精度のために組み合わせます
複数のLookAroundsをスタックして、非常に特定の条件を作成できます。
たとえば、 User 'alice' logged in
ようなログラインからユーザー名を抽出します。
(?<= user ')(?!admin')[a-za-z](?= 'ログイン)
これは次のとおりです。
-
User '
-
admin
を除外するためのネガティブルックヘッド - ユーザーの後に
' logged in
ことを確認するためのポジティブな見た目
したがって、それはalice
一致しますが、 admin
をスキップします。
別の現実世界の使用:特定のドメインからのものではないメールアドレスを見つける。
\ b [a-za-z0-9 ._% - ] @(?!(gmail \ .com | yahoo \ .com))[a-za-z0-9.-] \。[a-za-z] {2、} \ b
これは、ネガティブなLookeadを使用してGmailとYahooのアドレスを除外します。
一般的な落とし穴とヒント
- lookaheadsの順序は重要です:スタートで複数のLookaheadsを使用する場合、それらはすべて同じ位置から始まります。そのため、通常、注文はロジックに影響しませんが、パフォーマンスに影響を与える可能性があります。
- LookBehindsは、一部のエンジンで固定されている必要があります。古いJavaScriptまたはPythonの
re
モジュールでは、LookBehindsには固定長が必要です。たとえば、(?はOK(両方のブランチが固定)ですが、 <code>(?は許可されていません。
- LookArounds内の非キャプチャグループを使用してください:キャプチャしていないため、
(?:...)
とグループロジックは、不必要なキャプチャオーバーヘッドを避けます。 - テストエッジケース:LookAroundsは微妙になる可能性があります。空の文字列、境界、重複パターンなどの入力で常にテストしてください。
見た目と見た目をマスターすると、パターンマッチングを激しく制御できます。それらは必ずしも必要ではありませんが、テキストを消費せずにコンテキストを主張する必要がある場合、それらは不可欠です。単純なケースから始めて、仮定を検証し、徐々に複雑な検証に基づいて構築します。練習により、それらは第二の性質になります。
以上が複雑な文字列アサーションの見た目と見た目を習得しますの詳細内容です。詳細については、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 統合開発環境

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

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

namedcapturegroupsinphpprovideaclearandmaintainablewwaytoextractmatchedtextbyasingingmandinginsteadinsteadedofrelyingonnumericindices.1.use( 'name'pattern)syntaxtodefineNenamedgroupsinpcre.2.inpreg_match

TheumodifierinPHPregexisessentialforproperUTF-8andUnicodesupport.1.ItensuresthepatternandinputstringaretreatedasUTF-8,preventingmisinterpretationofmulti-bytecharacters.2.Withoutu,characterslikeéoremojismaycausemismatchesorfailuresbecausetheengineread

ポジティブアサーション(?= ...)、ネガティブアサーション(?!...)、ポジティブアサーション(??

usepreg_replaceforsimpeltimpatternswapswithtaticReplacementsorbackReferences.2.usepreg_replace_callback_arrayformultiplepatternsRequiringcustomlogicviacallbacks、特にwhen replacementsdependentent、infunctions、infuneditionalling

catastrophicbacktrackingCurswhennestedgreedyquantifierscauseexponentialbacktrackingonfailedmatches、asin^(a)$ ang "aaaax" .2。

thex、s、andjmodifiersinperlenhanceregexfficibility:1)thexmodifierallowswhiteSpaceandcomments forreadablepatterns、naverinscapedspacesandabling#コメント、2)themodifiermakentmatchnewlines、

pcre'sRecursivePatternSeNableMatchingNestedStructuresSolSheSORBracketsusing(?r)ornaMedReferenceslikelike(?&name)、recursively -applyingthepattern; forexample、^$$)|(?1)$$

preg_match_all関数を使用して、正規表現と協力して、PHPログファイルを効率的に解析します。 1.最初に、ApacheのCLFなどのログ形式を分析します。 2。名前付きキャプチャグループを使用して通常のパターンを構築して、IP、メソッド、パス、その他のフィールドを抽出します。 3. preg_match_allを使用してpreg_set_orderフラグと協力して、バッチでマルチラインログを解析します。 4.フィールドの欠落や交差列ログなどのエッジケースを処理します。 5.抽出されたデータを変換して入力し、最後に非構造化されたログを構造化された配列データに変換して、さらに処理します。
