2016-06-17 8 views
-1

私が持っているこのテキストチェーン正規表現(notepad ++)でこの式を置き換えるにはどうしたらいいですか?

私は "14 2 14 25 3 14 25 12 4 14 25 12 40 5 14 25 12 40 10"

を取得したいです

たとえば、14の後にこの14の後に(14 14 2)を置き換えると、私は2の後でそれを開始できません。

これ以外の方法はありますか? たとえば、マッチに含まれていないグループ(マッチする前のグループ)を使用して置き換えますか?

これがあなたのためにトリックを行う必要があり、私に

答えて

0

を助けてください:

正規表現((?:\s?\d+\s?)+)((?:[a-zA-Z](?![^a-zA-Z]+\1))+)

交換$1$2 $1

あなたは「をクリックする必要がありますこれを行うにはすべてボタンを交換してください(d 1つのショットで1つは、それが一致を見つけることができる限り繰り返す必要があります。 Online PHP example

enter image description here

説明

  • \s:前の式は0または1時間を一致させる必要があります:単一のスペース文字
  • ?と一致します。
  • \s?:0または1のスペース文字に一致します。
  • \d:数字の文字([0-9]に相当)と一致します。
  • +:前の式は、少なくとも1回は一致する必要があります(無限から無限大)。
  • \d+:あなたと同じくらい多くの数字を(少なくとも1回以上)一致させます。
  • ():キャプチャグループ
  • (?:):非キャプチャグループ
  • ((?:\s?\d+\s?)+):オプションの空白文字に続く1桁以上の文字が続き、オプションの空白文字と一致します。この表現は、非キャプチャグループとそれに続くプラスで囲まれています。つまり、正規表現は可能な限りスペースと数字の組み合わせを一致させようとします(つまり、'14 25 12 40 'のようなものになります)。

キャプチャグループは、置換で再利用する価値を保持するためのものです。キャプチャグループの最後にプラスの数字を追加することはできません。キャプチャ('14 25 12 '全体の代わりに' 12 'を使用して'14 25 12 40'を構築する)。

  • [a-zA-Z]:いずれの場合でも(下、上)任意の英字に一致します。
  • \1:最初のグループでキャプチャされたものへの参照。
  • (?!):否定先読み。
  • [^]:負の文字クラスは、そう[^a-zA-Z]は何
  • ((?:[a-zA-Z](?![^a-zA-Z]+\1))+)に一致する意味:否定先読みは、我々は常に入力テキストで最初の「14 2」が一致するまで終わらないことを確認するものとします。それがなければ、 "14 14 14 14 14 14 14 25 three four four 40 five 10"(タイムアウトに達するまで "14"、 "25"が繰り返される)という結果を与える無限ループに終わるだろう。

基本的には、一致するすべての英字について、最初のキャプチャグループ(例:「14」)の内容が数字シーケンスに存在しないことを主張することをお勧めします。

置換の場合、$1$2 $1は、キャプチャグループ1と2の内容を入力し、スペースを追加してキャプチャグループ1の内容をもう一度入力することを意味します。

あなたの期待に合っていれば、私の答えを受け入れることを忘れないでください。

関連する問題