問題タブ [lookaround]

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 に答える
6870 参照

c# - この正規表現の置換はどのように文字列を反転させますか?

これは、一連の教育正規表現記事の4番目の部分です。ネストされた参照(この正規表現は三角数をどのように見つけるか?)とアサーション内の「カウント」(参照:a ^ nb ^nをJava正規表現と一致させる方法)の組み合わせを使用して文字列を反転する方法を示します。 。プログラムで生成されたパターンは、メタパターンの抽象化を使用します(このJava正規表現はパリンドロームをどのように検出しますか?を参照してください)。シリーズで初めて、これらの手法は、文字列全体の照合ではなく、置換に使用されます。

完全に機能するJavaおよびC#の実装が提供されます。心に強く訴える引用が含まれています。

正規表現を使用して文字列を逆にすることは、決して良い考えとは思えませんでした。また、それが可能かどうか、もしそうなら、どのようにそうしようとするかはすぐにはわかりませんでした。

それはまだ良い考えではありませんが、少なくとも今ではそれが可能であることがわかっています。これを行う1つの方法があります。

C#ideone.comにもあります

Java ideone.comにもあります

C#バージョンとJavaバージョンはどちらも同じ全体的なアルゴリズムを使用しているようですが、抽象化された実装の詳細にわずかな違いがあります。

明らかに、これは文字列を逆にするための最良の、最も簡単で、最も効率的な方法ではありません。とはいえ、正規表現について学ぶために。パターンを概念化する方法。それらに一致するようにエンジンがどのように機能するか。さまざまなパーツを組み合わせて、必要なものを構築する方法。読みやすく、保守しやすい方法でこれを行う方法。そして、何か新しいことを学ぶという純粋な喜びのために、これがどのように機能するかについて説明してもらえますか?


付録:チートシート!

これは、使用される基本的な正規表現構造の簡単な説明です。

  • (?sx)埋め込まれたフラグ修飾子です。s「単一行」モードを有効にして、ドットを任意の文字(改行を含む)に一致させます。エスケープされていない空白が無視される(コメントに使用できる)フリースペースxモードを有効にします。#
  • ^および$は、行の先頭と末尾のアンカーです。
  • ?繰り返し指定子はオプション(つまり、0または1)を示します。たとえば、繰り返しの数量詞として、 (つまり、ゼロ以上の)繰り返しがが進まない/欲張りでない.*?ことを示します。*
  • (…)グループ化に使用されます。(?:…)非キャプチャグループです。キャプチャグループは、一致する文字列を保存します。バック/フォワード/ネストされた参照(例\1)、置換置換(例$2)などが可能です。
  • (?=…)ポジティブな先読みです; 与えられたパターンの一致があると断言するのは右に見えます。(?<=…)ポジティブな後ろ姿です; 左に見えます。

言語参照/追加リソース

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

c# - C# 正規表現でのルックアラウンドの効率。できれば避けるべきですか?

みんな!私は正規表現にはまったく慣れていませんが、とても気に入っています。

よろしければ私をつまらないと呼んでください。しかし、オプションがある場合、先読みと後読みを使用しないようにする必要があるかどうかを本当に知りたいです。

たとえば、次の 2 つのコマンドは同じことを行います。1 つは後読みを使用し、もう 1 つは使用しません。

どちらを使用しますか?どちらがより効率的ですか?

回答ありがとうございます。

0 投票する
2 に答える
1951 参照

regex - regex: サブ正規表現に一致しない行に一致します

正規表現foobarがあり、 foobarに一致しないドキュメント内のすべての行を検索したいとします。これはできますか?どうすればいいですか?

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

regex - 正規表現 - 条件付きルックアラウンドと一致しますか?

ルックアラウンドを使用して文字列の一部を一致させたいのですが、その行に他の単語が含まれていない場合に限ります。

一部のクマは森に住んで食べています。

上記の行で、「eat in the」(「live and」と「woods」の間) を見つけたいと思います。

ただし、ルックアラウンドの後、前、またはルックアラウンドの間のいずれかで、「クマ」がラインから離れていない場合に限ります。

一致を返すべきではない行の他の例は次のとおりです。

クマのように、森の中で暮らして食べる動物もいます。

一部の動物は、森の中でクマを食べて生きています。

この条件を正規表現に追加するにはどうすればよいですか?

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

regex - 両側を評価するための正規表現を見回しますか?

わかりました、私はかなりトリッキーな正規表現の問題を抱えています。

次の文字列の+記号を一致させて空白に置き換える必要があるため、左側の文字列は右側の文字列になる必要があります。

私はこれでほとんどの日を釘付けにすることができました。これはプラス記号の前後の文字列をチェックします。

ただし、一度に(2)に隣接するプラス記号のセットを1つだけ釘付けにすることができます。

私の現在の正規表現の混乱状態では、パターンをより大きな条件でラップする必要があるのか​​、それともルックアラウンドでどちらかまたはパターンを実装する必要があるのか​​疑問に思っています。そこにある正規表現のメイヴンは、これに旋風を与えることを気にしていますか?

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

.net - 正規表現の一致でルックアラウンドを消費するか、非キャプチャを無視する

次の文字列について考えてみますABC。正規表現を使用して次のグループをキャプチャしたいと思います。

両方のグループは、単一の正規表現を使用してキャプチャする必要があります。私はコードを制御できないので、サブマッチやキャプチャグループは役に立ちません。

私は両方の非キャプチャグループと周りを見回してみました。

非キャプチャグループの場合、試合は依然として最終結果の一部です。

Group1:ABC#Bは試合の一部であるため、正しくありません。グループ2:B

ルックアラウンドでは、Group2は消費されず、先読みに続く正規表現は、Group1の一部として含まれるGroup2のコンテンツと再び一致する必要があります。

Group1:ABC#Bは試合の一部であるため、正しくありません。グループ2:B

Group1の試合の一部として「B」を無視するにはどうすればよいですか?

これを回避するための助けは大歓迎です。

ありがとう、バラジ

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

php - PHP正規表現がで始まっていない..ネガティブルックビハインドが機能していませんか?

ネームサーバーを抽出しようとしています。の形式は、たとえば$outputを含むようなものns1.nameserver.comです。

が含まれる場合もありますwww.apple.com
もちろん、これはネームサーバーではありません。

www.
私は結果を含めないようにしているので、私の試みを含む結果は以下のとおりです。

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

regex - RegEx (正規表現) を使用して特定の単語の後の単語を選択する

つまり、特定の単語の後にある単語を一致させようとしています。

だから私は文字列を持っています

今、私は "Age=" の後にすべてを選択したいのですが、"Age="含まれていません。

要するに、私は"55"を選択したいだけです。各行の終わりに改行文字があります。今、私はルックアラウンドを次のように見ました
(?!(Age)).*\r

これは機能しません。

ここで提案を受け付けます。

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

regex - OracleSQLの先読み正規表現-アンダースコアの後にゼロを削除します

次の正規表現を使用して、アンダースコアに続くすべてのゼロを削除しました:( (?<=_)0+Javaの場合)または/(?<=_)0+/(phpの場合)。

Serial_Number_000000222->Serial_Number_222

この「lookaroud」構文は、 Oracleでは機能しないようです。誰かが代替案を提案できますか?

どうもありがとう

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

.net - 正規表現のある位置で一致する可能性がありますが、別の位置では一致しません (例: 位置 XOR)?

より大きな正規表現でいくつかの部分式を作成しようとしています。各部分式は、入力のある場所または別の場所で何かに一致しますが、両方の場所ではなく、できれば「関心のある領域」ごとに同じ名前のグループを使用します。たとえば、下のイタリック体のボリューム単位と太字の通貨単位を一致させたいと考えています。

  • $3.23米ドル/ガロン
  • ガロンで 3.23米ドル
  • 4.50カナダドル/ガロン
  • 1ガロン@ 3.23米ドル
  • 10ガロン。@ $4.50カナダドル

またはより一般的に:

  • stuffmorestuff XXXイエトモアスタッフ
  • XXXをもっと見る

stuffmorestuffは部分式の複雑なセットになる可能性があります。

のいくつかの組み合わせを使用して可能かもしれないようです

  • グループ スタックのプッシュ/ポップ
  • バランス グループ
  • 見回す

しかし、どうすればよいかわかりません。それは交互(|)または異なる表現の複数のパス(同じことになると思います)に帰着しますか?