我有一些剥离的网址
en/Category/Games/TMNT/L-Michelangelo/Donatello-Groupie-Ice/p/1-23-Raphael;jsessionid=F9877C7888FFC882
en/Category/Comics/Mortal-Combat/KO/Finish-Him/p/1111111-300-Y-E-S
en/Category/Games/Dark-Knight/L-Batman/Joker-110/p/123-456-Green
en/Category/Games/Pokemon/Co-Nintendo/M-Set/p/7143499-990-Pokeball
en/Category/Games/Battlefield/c/2142
Normaly我使用它来匹配它们:
/^en\/(.+)$/
或者也许:
/^en\/Category\/Games\/(.+)$/
仅匹配游戏。
这非常好用!
但是现在,我注意匹配所有内容,但不包含"第四个网址目录"中包含宠物小精灵或 Mortal-Combat 的网址。
像这样,尝试使用(?!Test)。 *用brakets制作它;
/^en\/(.+)\/(.+)\/[(?!Pokemon).*|(?!Mortal-Combat).*]\/(.+)$/
但它不起作用。
有什么建议吗?
答案 0 :(得分:1)
这应该做你想要的......
^en\/([^\/]+)\/([^\/]+)\/(?!Pokemon)(?!Mortal-Combat)([^\/]+)\/(.+)$
首先,在大多数情况下,不要捕获.+
,因为它会一直捕获到行尾,而是捕获[^\/]+
(不是正斜杠,1次或更多次),所以它在这种情况下,限制你想要的边界捕获。
其次,负向前瞻不会在执行时移动光标,因此它们只是相互坐在一起,就像说下一个字符不是Pokemon
和下一个字符(仍然没有移动光标)不是Mortal-Combat
。
最后一个捕获组捕获所有内容,直到字符串结束。
如果你想捕获Mortal-Combat-II
而不是Mortal-Combat
,那么在负向前瞻的末尾添加一个转义斜杠,这样它只会查找以匹配文本结尾的匹配...
(?!Pokemon\/)(?!Mortal-Combat\/)
答案 1 :(得分:0)
尝试使用此正则表达式来获取除了包含" Pokemon"或"凡人战斗":
(?!.*Pokemon|.*Mortal-Combat)^en\/(.+)$
请参阅演示:http://regex101.com/r/fB5uD6
注意:我已经在您的问题中监督了第四个网址目录上的。所以这个正则表达式将检查一个url是否没有任何地方的
答案 2 :(得分:0)
这会限制搜索只在第4个“插槽”中使用Pokémon或Mortal-Combat过滤那些行
/^en\/(?!([^\/]+\/){2}(Pokemon|Mortal-Combat)\/)/