タグ付けされた質問 「regular-expression」

正規表現(「regex」に短縮されることが多い)は、文字列内のパターンの照合に使用される宣言型言語で記述された式です。

3
正規表現を使用して検索および置換
多くのユーザーのデフォルトが入ったファイルがあります。テキストの一部を変更したいのですが、マッチャーとリプレースメントの作成に苦労しています。次の例を使用します。 ############################################################################### # Trackpad, mouse, keyboard, Bluetooth accessories, and input # ############################################################################### # Trackpad: enable tap to click for this user and for the login screen defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true 私は交換したい# Trackpad: ...とrunning "Trackpad: ..." 問題を分解して、正規表現テスターを使用して何かを思い付きました: /\n\n#\s(.*)/g Vimでこれを使用しようとすると、うまくいきません。 :/\n\n#\s(.*)/running "\1"/g 私の問題は、具体的には次の2つの質問に要約されると思います。 \n文字の検索を回避し、代わり#に検索グループの最後に表示されないようにするにはどうすればよいですか? キャプチャグループを効果的に使用するにはどうすればよいですか? 以下にいくつかの素晴らしい答えがあります。3つすべてから選択するのは難しいですが、選択した答えが私の元の仕様にとって最も正確であると感じています。実際のファイルで 3つの回答すべてを試して、それらについてどのように感じているかを確認することをお勧めします。

2
vimの正規表現システムでルックアラウンドは可能ですか?
ルックアラウンドステートメントがあると便利なvimの多くの状況に遭遇しました。私は、標準の前後参照の構文を使用して試してみました((?=)、(?!)等。)が、Vimがこの機能をサポートしていません表示されます。vimには、これらの種類のステートメントと同等の構文がありますか?

1
VimでUnicode結合文字を検索できますか?
文字ã(小文字の+を組み合わせたチルダ)を持つファイルがあります。 Encodingとfileencoding両方utf-8です。 gaショー <a> 97, hex 61, octal 141 <~> 771, Hex 0303, Octal 1403 (ただし、実際の結合チルダでは<>)およびg8ショー 61 + cc 83 での検索は/a\%u0303うまくいきます。 検索すると\%u0303、E486パターンが見つかりません。 基本文字も検索せずに、結合文字のみを検索できますか?

3
正規表現マッチャーを欲張らないようにする方法は?
私はファイル内のテキストを置き換えるために正規表現を使用しようとしています(完全なURLをprotocol / domain /に置き換えます): :%s/\(https\?:\/\/.*?\/\).*/\1/gc 残念ながら.*?、?量指定子をエスケープしようとしても、文字列と一致しませんか?vimで貪欲でない数量詞をどのようにエスケープする必要がありますか?

5
Pythonキーワード引数を強調表示するVim構文パターン
私はvim正規表現の学習に苦労しています(他の正規表現もよくわかりません)ので、主な問題は一致する正規表現を定義することです some_function_call(simple_value, keyword=value) この例のキーワード。 したがって、かっこ内にあり、その後に等号がある場合は、単語と一致する必要があります。 次の問題は、vimで構文ファイルを定義する方法です。私はそれを手伝っていただければ幸いですが、学ぶのはそれほど難しくないはずなので、おそらく自分でそれを行うことができます。 pythonの独自の構文スクリプトを作成したという回答に基づいて編集します。試してみてください。 ここにリンクの説明を入力してください

1
Vim正規表現が9個を超えるキャプチャグループを許可しないのはなぜですか?
:h E65我々はVimが置換コマンドで複数の9つのキャプチャグループを許可していないことがわかります。 たとえば、次のコマンドは機能します。 s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1 ただし、キャプチャグループがもう1つあるこの例は失敗します。 s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1 私の質問は、失敗する理由(Vimのハード制限)ではなく、Vimにこの制限があるのはなぜですか? また、9個以上のキャプチャグループを含む実際の正規表現は、おそらく読み取りと保守が非常に困難になることを承知していますが、私はまだ興味があります。

2
行のすべてではなく一部のみで:substituteを実行するにはどうすればよいですか?
このような行があります: function my_function(argument, another argument, but there are spaces) (引数の名前の中の)スペース文字をアンダースコアに置き換えたい。したがって、私は使用したい: :s/\ /_/g しかし、行全体に適用せずに、たとえばカーソル位置から開始することを選択するにはどうすればよいですか?(または3番目の単語)?

1
Vimの正規表現マジックは、よく知られている正規表現クラスと互換性がありますか?
多くのUnixツールの正規表現構文は、多くの場合POSIXでコード化された基本および拡張正規表現(それぞれBREおよびERE)であり、一部の最新の実装では、Perlスタイル(PCREがこの実装です)。 Vimの魔法のレベルと、外部で定義されているがよく知られているクラスとの間に1対1の対応関係はありますか?POSIX にルック\mアラウンド\vが含まれていないことを除いて、BREおよびEREのように見えます。 そのような通信が存在する場合、どこかで定義されていますか?pattern.txtの言及は1つだけですPOSIX。 または、Vimの正規表現を記述するために「マジック」に固執する必要がありますか?


1
Vim正規表現リテラルを異なるマジックモードに変換する方法はありますか?
文字列リテラルに魔法のVim正規表現がある場合、正規表現全体を別の魔法モードを使用する代替表現に変換する方法はありますか?そのため、同等の正規表現をソースコードに貼り付けることができますか? たとえば、このマジックモードパターンを変換する場合: '\m-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>' 非常に魔法のモードにすると、読みやすくなります: '\v-=<\d+L=>|0[xX][0-9a-fA-F]+>' 私はしばしば手で変換しようとしてミスを犯します。

4
sコマンドで\ rと\ nが異なることを意味する理由は何ですか?
私たちは皆、検索時\nは改行であり、\r復帰(^M)であることを知っていますが、置換するとき\rは改行\nで、nullバイト(^@)です。 この非対称性の起源は何ですか?この振る舞いは...控えめに言っても独特です(そして最初に間違えたときはかなり非生産的です)奇妙な歴史的理由があると思います。 (偶然にも、この動作を「修正」してより直感的なものにする方法はありますか?)

1
正規表現検索パターンによる折りたたみ
空白で区切られた値の列を含むプレーンテキストファイルを取得しました。このような: AU 3030 .... ... .... AU 3031 .... ... .... AU 3032 .... ... .... AU 3033 .... ... .... IT 48100 ... .. ..... IT 40100 ... .. ..... IT 48123 ... .. ..... UK 3333 ... ... ..... UK 4444 ... ... ..... UK 5555 ... ... …

1
一致した行の前後のn行の範囲を削除しますか?
繰り返し使用する構成ファイルがあり、正規表現に一致させて、一致の前後の行範囲を削除したいのですが。また、1つのコマンドで一致を削除します。 使うことができます... :g/match/-1d ...試合前から複数の行を削除するために数回... ...そしてそれをいくつかの呼び出しと組み合わせる... :g/match/+1d ...一致後に複数の行を削除するには... しかし、1つのコマンドで一致の前、後、含む範囲の行を削除する方法はありますか?

11
オンラインで2番目の出現を置換
ファイルのリストがあります: ./a.temp.txt ./a.temp.txt ./a/b.temp.txt ./a/b.temp.txt ./a/b/c.temp.txt ./a/b/c.temp.txt そしてtemp.、各行のを削除したいのですが、2番目の出現だけなので、ファイルは次のようになります。 ./a.temp.txt ./a.txt ./a/b.temp.txt ./a/b.txt ./a/b/c.temp.txt ./a/b/c.txt どうすればよいですか?

3
Vim正規表現の「\ zs」と「\ @ <=」アトムの違いは何ですか?
これは私がドキュメントから得たものです。\zs前の正規表現\@&lt;=に一致した後に「強調表示された部分を開始」し、前のアトムに一致した後に「強調表示された部分を開始」します。しかし、私はこれの微妙さを正確に理解していないので、誰がそれらが少し深く異なっているかを誰かが説明できますか? これが私を不思議に思った理由です。 /\_s\zsnnoremap つまり、nnoremap先頭にスペースまたは行頭(つまり、前の行からの改行、つまり\_前のs)を選択し、実行gnしてビジュアルモードに入り、何らかの理由で最初の列のみ(つまり、最初の列(つまり最初の内は)選択されている-全体という事実にもかかわらず、言葉がされて強調して点灯します。nnnoremapnnoremap:hlsearch ただし、代わりに検索を実行すると /\_s\@&lt;=nnoremap を試してみてください。gn全体nnoremapが適切に選択されています。ここで何が起こっているのでしょうか?私は(あえて言う)いくつかのあいまいなバグを発見しましたか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.