5

特定のフレーズで始まる特定のURLを含め、別のフレーズを除外する正規表現を作成する方法を見つけるのに多くの問題がありました。

次で始まるページを含めたいと思います。

/womens
/mens
/kids-clothing/boys
/kids-clothing/girls
/homeware

ただし、URLに/sXXXXXXXが含まれているものはすべて除外します。Xは数字です。

これまで、以下のURLに一致するように作成しましたが、動作が非常に奇妙です。ルックアラウンドか何かを使用する必要がありますか?

\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/boys|homeware).*[^s[0-9]+].*

/homeware/bathroom/s2522424/4-tier-pastel-pop-drawers-approx-91cm-x25cm-x-28cm
/homeware/bathroom/towels-and-bathmats
/homeware/bathroom/towels-and-bathmats/s2506420/boutique-luxury-towels
/homeware/bathroom/towels-and-bathmats?page=3&size=36&cols=4&sort=&id=/homeware/bathroom/towels-and-bathmats&priceRange[min]=1&priceRange[max]=14
/homeware/bathroom?page=3&size=36&cols=4&sort=&id=/homeware/bathroom&priceRange[min]=1&priceRange[max]=35
/homeware/bedroom
/homeware/bedroom/bedding-sets
/homeware/bedroom/bedding-sets/s2471012/striped-reversible-printed-duvet-set
/homeware/bedroom/bedding-sets/s2472706/check-printed-reversible-duvet-set
/homeware/bedroom/bedding-sets/s2475332/union-jack-duvet-set
/kids-clothing/boys/shop-by-age/toddler-3mnths-5yrs/s2520246/boys-lollipop-slogan-t-shirt
/kids-clothing/boys/shop-by-age/toddler-3mnths-5yrs/s2520253/boys-2-pack-dinosaur-t-shirts
/kids-clothing/girls/great-value/sale?page=1&size=36&cols=4&sort=price.asc&id=/kids-clothing/girls/great-value/sale&priceRange[min]=0.5&priceRange[max]=7
/kids-clothing/girls/mini-shops/ballet-outfits
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths/s2484120/3-pack-frill-pants-pinks
/kids-clothing/girls/shop-by-age/baby--newborn-0-18mths/s2504431/3-pack-l-s-bodysuit
/mens/categories/tops?page=5&size=36&cols=4&sort=&id=/mens/categories/tops&priceRange[min]=2&priceRange[max]=22.5
/mens/categories/trousers-and-chinos
/mens/categories/trousers-and-chinos/s2438566/easy-essential-cuffed-jogging-bottoms
/mens/categories/trousers-and-chinos/s2438574/easy-essential-cuffed-jogging-bottoms
/mens/categories/trousers-and-chinos/s2458939/regatta-zip-off-lightweight-outdoor-trousers
4

2 に答える 2

2

あなたは正しい軌道に乗っています。否定的な先読みはそれを行います:

"^(?!.*\/s\d+)\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/girls|homeware)\/.*"

文字列の先頭への^アンカー。文字列のどこにも表示されない(?!.*\/s\d+)手段で"/sXXXXXXX"あり、残りの部分は必要な開始トークンと一致します。

[^s[0-9]+]うまくいかなかった理由は、 [^xyz]1 つの文字だけに一致するためです。あなたが効果的に言っているのは"s"、 、 、"[""0-9"の組み合わせではない任意の文字を探しているということです"]"。例えば"s[234[s]"

文字列の先頭に否定先読みを配置する必要がある理由は、何も一致しないためです。の後に置くと、.\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/girls|homeware)\/.*の前のすべてにうまくマッチします"/sXXXXXXX"。つまり、データの 1 行目は、"/homeware/bathroom/" と一致します。

于 2013-03-18T21:01:12.960 に答える
1

はい、否定的なルックアラウンドが必要です。

/^\/(womens|mens|kids\-clothing\/boys|kids\-clothing\/boys|homeware)(?:\/(?:(?!s\d+).)*)+$/gm

一度に 1 行ずつ比較する場合は、複数行 (m) フラグは必要ありません。文字クラス (角かっこで示される) が複数の角かっこ内にネストされているため、動作がおかしい可能性がありますが、これは機能しません。文字クラスをネストすることはできません。これはテスト済みで、リドルで動作します。

于 2013-03-18T21:07:53.960 に答える