我有两种形式的相同网址(唯一的区别是?
之前的最后一个斜线),为此我需要创建一个模式(正则表达式)。因此,相同的模式可以处理URL的两种变体。
products/dispenser/hand-towel?gclid=CPDv
和products/dispenser/hand-towel/?gclid=CPDv
我正在尝试使用以下模式,该模式适用于第一个URL但不适用于第二个URL。
^products/([^/]+)/([^/]+)/?$
我在模式之下尝试了一些,但没有取得成功。
^products/([^/]+)/([^/]+/.*| /?$)
^products/([^/]+)/([^/]+)(^/?)$
^products/([^/]+)/([^/]+)/?$
通过使用相同的模式,我想得到输出,我通过第一个URL获得。
{R:1} Dispenser
{R:2} hand-towel?gclid=CPDv
从第二个网址我需要得到输出
{R:1} Dispenser
{R:2} hand-towel/?gclid=CPDv
我有6种网址
products/dispenser/hand-towel?gclid=CPDv
products/dispenser/hand-towel/?gclid=CPDv
products/dispenser/hand-towel
products/dispenser/hand-towel/hand-roll?gclid=CPDv
products/dispenser/hand-towel/hand-roll/?gclid=CPDv
products/dispenser/hand-towel/hand-roll
因此,以上所有网址都会落在同一页面上,但如果前3个网址被点击,那么我需要dispenser
和Hand-towel
作为R1和R2,如果第4,第5和第6个网址将是然后我需要dispenser
,hand-towel
和hand-towel-roll
作为R1,R2和R3。
^products/([^/]+)/([^/]+)/?$
模式仅适用于1和2个URL,因为此模式无法识别URL 4,5和6的R3参数。
^products\/([^\/]+)\/([^\/]+)\/(.+)$
模式不适用于第一个网址。
答案 0 :(得分:3)
您的问题最后是HTMLField
。这意味着$
,但您仍然希望匹配end of line
。
见这里:https://regex101.com/r/SkHXWH/2
被捕获的小组将为您提供线索。
你为什么不这样做:
?gclid=CPDv
这将为您提供所需的输出/捕获组
对于您在评论中所述的网址
^products\/([^\/]+)\/(.+)$
^^^R1^^ ^R2^
或只有2组
^products\/([^\/]+)\/([^\/]+)\/(.+)$
^^^R1^^^ ^^^R2^^^ ^R3^