問題タブ [negative-lookahead]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
315 参照

php - PHP正規表現タイトル変換/ネガティブルックアヘッド/toLowerCase

HTMLページの一部のタイトルをに変換しようとしています<h2>。パターンはシンプルです。

基本的に、その間<p><strong></strong></p>にあるものはすべて大文字で取得します。簡単なので、ここに複雑な部分があります。

まず、1つの例外を作成する必要があります。<p><strong>CP</strong></p>に変換しないでください<h2>?!(CP)直後に追加してみました<p><strong>が、うまくいきません。

次に、最初の文字を大文字にする必要があります。preg_replace(例:)で「strtolower」とともに「ucfirst」を使用するとucfirst(strtolower(preg_replace($pattern, $replacement, $test)));、文字列内のすべての文字が小文字になり、「<」が最初の文字であることが検出されるため、ucfirstは機能しません。

ヒントはありますか、それとも私は正しい方向に進んでいますか?


編集

助けてくれてありがとう、使った方が間違いなく良かったpreg_replace_callbackです。すべてのタイトルが3文字を超えていることがわかったので、リミッターを追加しました。特殊文字も追加されました。これが私の最終的なコードです:

0 投票する
3 に答える
824 参照

php - PHP preg_match まですべて

多くのテキスト/画像を含むブログ エントリがあり、そのブログから抜粋したいと考えています。より具体的には、2番目の画像タグの後まですべてを一致させたい

以下はサンプルテキストです。

私は次のような否定的な先読みを試しました

しかし、先読みを「+」修飾子に適用する方法がわかりません。誰でも手がかりを得ることができました。本当に感謝しています。

0 投票する
3 に答える
176 参照

python - 不足している場合に文字列を追加するpywikipedia(python)正規表現

次のような一連のレコードがあります。

名前

  • 名前 ポール・ベリー:現在
  • ジョージ・ネッキーの住所:不在
  • 名前 ボブ・ヴァン・バステン:現在
  • 名前 リチャード・フォン・ランピー: 不在
  • 名前パパバッジ: ありません
  • 名前 ポール・ベリー:現在
  • ストリート・ジョージ・ネッキー:不在
  • Street Bob van Basten: 現在
  • 名前 リチャード・フォン・ランピー: 不在
  • City Daddy バッジ: 存在しません

そして、名前で始まるすべてのレコードがフォームにあることを望みます

  • 名前名前 姓: 存在しません

他の単語で始まるレコードをそのまま残します。

つまり、名前が not で始まるレコードに「not」という文字列を追加したいのです。私はpython(pywikipediabot)で作業しています

しようとしている

ただし、既に存在する場所でも「not」を追加します。

おそらく、否定先読み構文を理解していないのでしょうか?

0 投票する
3 に答える
5720 参照

regex - 正規表現:2つの一致の間の否定的な先読み

私は次のような正規表現を作成しようとしています:

これはネガティブな先読みで機能するようですが、次のような場合に問題が発生します。

上記の文を一致させたいのですが、最初に一致した単語と2番目に一致した単語の間の負の先読みが「こぼれ」、2番目の単語が一致することはありません。

実際の例を見てみましょう。

「i」という単語と「pie」という単語が含まれるすべての文を一致させたくはありませんが、これら2つの単語の間に「hate」という単語を含めることはできません。私はこれらの3つの文を持っています:

私はこの正規表現を持っています:

これは最初の文と一致しますが、2番目の文とは一致しません。これは、負の先読みが文字列全体をスキャンするためです。

ネガティブな先読みを制限して、「憎しみ」に遭遇する前に「パイ」に遭遇した場合に満足するようにする方法はありますか?

注:私の実装では、この正規表現の後に他の用語が存在する可能性があります(文法検索エンジンから動的に構築されます)。たとえば、次のようになります。

現在JRegexを使用していますが、必要に応じてJDKRegexに切り替えることができます。

更新:最初の質問で何かを言及するのを忘れました:

「ネガティブコンストラクト」が文のさらに上に存在する可能性があります。「ネガティブ」コンストラクトがさらに上に存在する場合でも、可能であれば文と一致させたいと思います。

明確にするために、これらの文を見てください:

robの答えは、この追加の制約に対して完全に機能するので、私はそれを受け入れています。

0 投票する
1 に答える
26953 参照

python - 否定先読みのpython正規表現

文字列 '02 d0' が文字列内の特定の位置にない場合に、一連のバイトを正規表現で一致させたいと考えています。この 2 バイトの文字列が出現しない位置は、右側の 0 バイト目から始まるバイト位置 6 と 7 です。

これは私がテストに使用しているものです:

この例を見ましたが、その方法は必要以上に制限的ではありません。負の先読みが文字列の最後にある場合にのみ適切に一致できる理由を誰かが説明できますか? この特定のビット位置で「02 d0」が発生しない場合、一致させるにはどうすればよいですか?

0 投票する
3 に答える
642 参照

java - 否定先読みを伴う Java 正規表現

ログファイルから情報を解析するために Java で正規表現を作成する際に問題に直面しています。

「timeinstant:任意の文字を含む文字列」という構造が1回からN回繰り返される文字列があります。

timeinstant の形式は "dd/mm/yyyy hh:MM:ss:MMMMMM" (M はマイクロ秒) です。

私がやろうとしているのは、着信文字列に含まれる最後の timeinstant のマイクロ秒を見つけることです。

たとえば、文字列で

m.find()を指したい "987: pump..."。これを取得するために、先読みで正規表現を使用しています。

"(\\d{3}:)(?!\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}:\\d{6})"

しかし、今は(に含まれる)m.find()を指しています。8192012/04/02 16:28:51:861819

0 投票する
1 に答える
4781 参照

php - PHP Regex - 単語 (文字列) が含まれている場合、一致を否定します

私はこれを行うために多くの方法を試しましたが、私が望むことを部分的に行うように見える唯一の方法は、正規表現を使用した文字列否定および正規表現で特定の単語を否定する方法で説明されている先読み否定です? しかし、現在の正規表現では機能しません。

この文字列があると仮定します:

編集:デバッグのために一致を返すべきではない、より詳細な文字列:

そして現在の正規表現パターン:

編集: 次の正規表現 (# と #is なし) を使用して、Regex Buddy でデバッグしています:

(これら 2 つの正規表現は、簡単に適応できるため、アプリケーションに同じ効果があるはずです。より理にかなっている場合は、後者を使用してください)

文字列の両方の行に一致します。と の間に[spoiler]文字列がある場合に一致を返さないようにしたい。[url=xxxx://yyyy][/url]

否定的な先読みで実行できると思いますが、使用できなくすることなく現在の正規表現に挿入する方法を見つけることができないようです。

どんな助けでも大歓迎です。

0 投票する
3 に答える
3121 参照

asp.net - \*、\|、\^、\~ の ASP.NET の正規表現バリデーター

ユーザーがこれらの文字列を入力しないようにしたい:\*または\|または \^または\~.

ASP.Net ページでこれに使用する正規表現は何ですか? また、ASP.Net 正規表現バリデーターは、クライアント側の正規表現を使用してサーバー側で自動的に検証しますか、それともサーバー側の検証コードを記述する必要がありますか?

***許可された

^|*~許可された

\**禁止されている

\^\|*\~禁止されている

0 投票する
4 に答える
2332 参照

regex - この正規表現の先読みが機能しないのはなぜですか?

一部の IIS Url Rewrites で使用する正規表現を設計しています。目的は、次の URL をキャプチャすることです。

  1. ルート ディレクトリ内の単なるファイル (ピリオドを含むことで識別) ではなく、
  2. クエリ文字列を含まず、かつ
  3. 特定のサブディレクトリのセット、特に「Account」と「Public」に属していない

私の現在の正規表現は次のようになります。

次のテスト セットでRegexPalを使用する:

私の正規表現は最初の 2 つのケースを正しく無視しますが、3 番目のケースではまだ一致しています。ここでの先読みの何が問題になっていますか?