我是Regex的新手。 我想匹配Google Analytics的某个网址页面模式。
问题:
模式如下:
/(de|en|fr|it)/../any-word-including-dashes/word-or-words-including-dashes-and-numbers
我想只匹配此模式,并将所有pagePathes排除在另一个正斜杠之外或与初始模式不匹配:
包括:
/de/ab/word-word/word1-and-something-else
/de/ab/word-word/word1-and-something-else?any_ting1=any.-thing2
排除:
/de/ab/word-word/word1-and-something-else/
/de/ab/word-word/word1-and-something-else/anything
/de/ab/word-word
/fr/moreThanTwoCHAR/anything
我的正则表达式:
搜索完SO(Exclude forward slash before end,"Match anything but"和Finding exactly n occurences of "/",disallow 0 or more occurences of a CHAR)后,我想出了以下正则表达式:
^(\/de|\/fr|\/en|\/it)\/..\/.+\/\w+[^\/]*
它正确地做了什么
它正确地排除了以下路径:
/fr/moreThanTwoCHAR/anything
失败的原因
上述正则表达式的问题在于它也匹配(在regex101上测试):
/de/ab/word-word/word1-and-something-else/anything
我似乎无法理解为什么它与字符串匹配额外的正斜杠,即使我说要排除0或更多其他出现(至少从我的理解)。任何人都可以解释我错在哪里?
答案 0 :(得分:1)
请注意,.
匹配任何字符(如果未使用DOTALL选项(/s
),则换行符除外),因此您的正则表达式只匹配您需要的更多输入类型。
您可以使用
'~^/(de|fr|en|it)/[^/]{2}(?:/[^/]+){2}$~'
请参阅regex demo。
模式详情:
^
- 输入开始/
- /
字符(de|fr|en|it)
- 三个备选子字符串之一:de
,fr
,en
或it
/[^/]{2}
- /
,然后是/
以外的任何2个字符(?:/[^/]+){2}
- 除了/
/
和1个以上字符的2个连续序列
$
- 输入结束。