0

クエリ文字列の値として、コンマで区切られた数値のリストを渡しています。たとえば、次のクエリ文字列があります。

?view=list&cat=1,8,18&sort=asc

ここで、「cat」変数から「8」を削除したいと思います。これまでのところ、「cat」の値のみに一致するようにこれを持っています

(?<=cat=)([^&]*)

これにより、「1,8,18」が得られます。今、正確な数字「8」だけを選択したいのですが、それは可能ですか? コンマ区切りのリストを配列に変換する方が簡単なのはわかっていますが、この特定のケースではそれは不可能です。

編集: 正規表現は、「cat」var 内の数値とのみ一致する必要があり、カンマ区切りのリストまたは単一の値として機能する必要があります。したがって、次のテスト文字列:

?view=list&cat=1,8,18&sort=asc
?view=list&cat=8&sort=asc
?view=list&cat=1,8,18&sort=asc&someOtherVar=8

それらはすべて単一の数字「8」にのみ一致する必要があります (「cat=」が前にないため、最後の 8 には一致しません)

4

3 に答える 3

1

後読みなし:

(cat=(?:\b[^8]\d*\b)*?),?8(&)|8,

グループ1と2のキャプチャに置き換えます

上記で追加した例に対してテストすると、正規表現の置換は次を返します。

?view=list&cat=1,18&sort=asc
?view=list&cat=&sort=asc
?view=list&cat=1,18&sort=asc&someOtherVar=8
于 2013-10-14T16:01:56.483 に答える
0

あなたの要件がよくわかりません。この正規表現はグループ番号で番号(存在する場合はcoma)\bcat=(?:\d+,)*(8(?!\d),?)をキャプチャします(変数番号で変更できます)。18,

ここで別の入力でテストできます: http://regex101.com/r/uM0bS7

一致します:

  • ?view=list&cat=3,1,8,18&sort=asc
  • ?view=list&cat=8,18&sort=asc
  • ?view=list&cat=8&sort=asc
  • ?view=list&cat=3,1,8,18,8&sort=asc
  • ?view=list&cat=3,1,8&sort=asc

値が82回ある場合はlast1つに一致します。1つに一致させたい場合は、次のように非キャプチャグループを遅延firstさせるだけで済みます:(?:\d+,)*\bcat=(?:\d+,)*?(8(?!\d),?)

于 2013-10-14T16:02:29.027 に答える