2017-01-12 11 views
-1

私は、データベースのGoogleのURLの中間をキャプチャするためのベース正規表現を把握しようとしています。URLの正規表現のキャプチャ

例えば、いくつかのリンク:

https://www.google.com/cars/?year=2016&model=かわす + デュランゴ & ID = 1234 https://www.google.com/cars/?year=2014&model=ジープ + チェロキー + クロスオーバー & ID = 6789

何だろう取得するテキストをキャプチャする正規表現になるdodge + du rango、またはジープ+チェロキー+クロスオーバー? (これは、+がまだそこにあることが大丈夫です。)

私の試み:

1) \b[=.]\W\b\w{5}\b[+.]?\w{7} が、これはのみのために何かのように働くだろう、ハードコーディングされたシナリオであるとして、これは明らかに動作しません。デュランゴの例を避ける。

2)正ルックバックを使用して、

[^+](?=&id) 

(「かわす+デュランゴを抽出します)が、これが唯一の1つの文字&記号の後ろにつかむように私は、これを使用するかどうかは完全にはわからない。

どのように私は(潜在的に)の文字列を抽出することができますが、regexp_replaceとアクセスマットを使用することができますように「モデル=」と「& ID」境界の間の+区切り文字のいずれかの量の任意の長さ?

+0

使用しているdbmsにタグを付けてください。 –

+0

が赤方偏移として追加されました。ありがとう –

答えて

0

は思わCHグループ:hereから

regexp_replace(input, 'model=(.*?)([&\\s]|$)', E'\\1') 

REGEXP_REPLACE機能は、POSIX正規表現パターンに一致するサブストリング のための新しいテキストの置換を提供します。 regexp_replace(source、pattern、replacement [、flags])の構文は です。 パターンに一致するものがない場合は、 ソース文字列は変更されずに返されます。一致するものがある場合、一致する部分文字列の代わりに の置換文字列を使用してソース文字列が返されます。 置換文字列には\ n(nは1〜9)が含まれ、 を指定して、n番目の括弧に一致するソース部分文字列 の部分式を挿入する必要があります。\ & を含めると、部分文字列パターン全体を一致させるには、 を挿入する必要があります。 置換テキストにリテラルのバックスラッシュを入れる必要がある場合は\を記述します。 flagsパラメータは、関数の の動作を変更する0文字以上の単一文字フラグを含む任意のテキスト文字列 です。旗私はフラググラム だけ 最初の1

0

をサブストリングのではなく、各マッチングの置き換えを指定している間、私は誤解されてもよいが、あなたがモデルを取得したい場合は、単にmodel=間のすべてのものを選択し、大文字と小文字を区別しないマッチングを指定しますとアンパサンド(&)です。

regexp_matches(input, 'model=([^&]*)') 
  • model=:マッチ文字通り
  • ([^&]*):キャプチャ
    • [^&]*:アンパサンド
      • *ない何か:アンリミテッド回