簡體   English   中英

如何使用正則表達式多次匹配組

[英]How to use regex to match a group multiple times

抱歉標題不好,我不知道如何正確表達。 我有一個 URL,例如 /color-white/size-large/,我需要在 htaccess 中重寫它。 在正則表達式之后,字符串應該看起來像 &color=white&size=large。

我不想對顏色、大小、顏色和大小進行多次重寫。

我在字符串 colour-white/size-large/ 上提出了(colour|size)-(.*?)\/替換為$1=$2& ,它返回 colour=white&size=large&,但是當有一個 / 在開頭,我不希望最后的字符串有一個尾隨 &。

編輯: \/*(colour|size)-(.*?)\/ &$1=$2有效,但是一旦前面有其他文本,它就會中斷,我猜是因為使用全局選項它每次都會嘗試匹配之前的文本它尋找顏色或大小。

為不同數量的參數添加多個重寫規則是很常見的。 這有效,包括它之前的內容(“連衣裙”)最多三個參數。 添加第四個參數只是第四行。 所需規則的數量隨着參數的數量線性增加,而不是指數增加。

RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/ $1?$2=$3&$4=$5&$6=$7 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/(colour|size|rarity)-([^/]+)/ $1?$2=$3&$4=$5 [L]
RewriteRule /?(.*/)?(colour|size|rarity)-([^/]+)/ $1?$2=$3 [L]

另一種方法是將所有這些作為單個參數傳遞並在您的處理程序中解析它。 在 PHP、Java、Perl 或任何你的后端語言中解析任意參數要干凈得多。 此代碼會將任意數量的它們放入“選項”參數中以在后端解析:

RewriteEngine on
RewriteRule /?(.*/)?(colour|size|rarity-[^/]+/)+ $1?options=$2 [L]

您還應該退后一步,詢問這是否是您真正想要或需要做的事情。 將任意參數粘貼到 URL 路徑中並不比將它們放在查詢字符串中更友好 您的最佳 URL 實際上可能是/dresses?size=large&colour=blue您可以在我對 SEO-friendly way to pass multiple values in a URL parameter 的回答中閱讀我的全部推理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM