目次
lookaheadsとlookbehindsとは何ですか?
ポジティブおよびネガティブルックヘッドを使用します
Lookbehindsで作業します
ルックアラウンドを精度のために組み合わせます
一般的な落とし穴とヒント
ホームページ バックエンド開発 PHPチュートリアル 複雑な文字列アサーションの見た目と見た目を習得します

複雑な文字列アサーションの見た目と見た目を習得します

Aug 04, 2025 am 06:35 AM
PHP Regular Expressions

肯定的なアサーション(?= ...)、否定的なアサーション(?!...)、肯定的な後方アサーション(?

複雑な文字列アサーションの見た目と見た目を習得します

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: 4242と一致します。

注: \b単語の境界であり、多数または識別子の一部と一致しないようにします。


ルックアラウンドを精度のために組み合わせます

複数のLookAroundsをスタックして、非常に特定の条件を作成できます。

たとえば、 User &#39;alice&#39; logged inようなログラインからユーザー名を抽出します。

 (?<= user &#39;)(?!admin&#39;)[a-za-z](?= &#39;ログイン)

これは次のとおりです。

  • User &#39;
  • adminを除外するためのネガティブルックヘッド
  • ユーザーの後に&#39; 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

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)

数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する 数値キャプチャを超えて:「preg_match」と `preg_replace`で名前付きグループを活用する Aug 04, 2025 pm 03:44 PM

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

`u`モディファイアを解き放つ:PHPでユニコード認識の正規表現に深く潜る `u`モディファイアを解き放つ:PHPでユニコード認識の正規表現に深く潜る Aug 03, 2025 am 06:39 AM

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

複雑な文字列アサーションの見た目と見た目を習得します 複雑な文字列アサーションの見た目と見た目を習得します Aug 04, 2025 am 06:35 AM

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

複雑な交換に `preg_replace` vs.` preg_replace_callback_array`を使用するとき 複雑な交換に `preg_replace` vs.` preg_replace_callback_array`を使用するとき Aug 08, 2025 pm 06:10 PM

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

獣を飼いならす:PCREでの壊滅的なバックトラッキングを緩和する 獣を飼いならす:PCREでの壊滅的なバックトラッキングを緩和する Aug 03, 2025 am 07:17 AM

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

高度なパターンコントロール:「x`、 `s」の探索 高度なパターンコントロール:「x`、 `s」の探索 Aug 04, 2025 am 10:54 AM

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

ネストされた構造を解析するためのPCREの再帰パターン ネストされた構造を解析するためのPCREの再帰パターン Aug 11, 2025 am 11:06 AM

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

PHPの `preg_match_all`を使用して堅牢なログファイルパーサーを作成します PHPの `preg_match_all`を使用して堅牢なログファイルパーサーを作成します Aug 03, 2025 am 09:20 AM

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

See all articles