2014-09-25 103 views
-1

在我的生活中,我对正则表达式的工作很少。因此,当我正在学习这个问题时,请带我一个新手。由于某种原因导致的正则表达式崩溃

我已经做了一个正则表达式来从URL列表中获取特定的网址。

下面的列表:

http://www.xxxx.com/us/en/brothers---sisters/one/maria-lang-1-c671030p2313063.html 
http://www.xxxx.com/us/en/lookbook-c471503.html 
http://www.xxxx.com/us/en/pictures-c496502.html 
http://www.xxxx.com/us/en/woman/shoes/high-heels-c269195.html 
http://www.xxxx.com/us/en/woman/handbags-c269200.html 
http://www.xxxx.com/us/en/woman/handbags/messenger-bags-c269202.html 

我正则表达式:

(us\/en\/)^(lookbook)|^(brothers---sisters)|^(pictures)[a-z0-9\-\/]*(c\d+(p\d+)?).html 

我不想:仅提取前三个网址,但这个表达式崩溃时我在线测试仪上测试。虽然,我已经知道,当我从正则表达式中删除第一个'^'运算符时。它至少运行没有崩溃,但当然我没有得到相关的结果。

我一直在敲我的头很长一段时间,但无法找到任何答案关于我的概率。请帮忙。

+0

这里有点问题,'^'表示行的开始,你不能在匹配的中间使用它。没有它你的正则表达式是正确的,请参阅http://regex101.com/r/gU3aB5/1 – Tensibai 2014-09-25 12:55:53

回答

1

您弄丢了插入符^,使用此:

(us\/en\/)(lookbook|brothers---sisters|pictures[a-z0-9\-\/]*c\d+(p\d+)?\.html) 

根据编辑评论:

使用负前瞻匹配的网址,但第3:

(us\/en\/)(?!lookbook|brothers---sisters|pictures[a-z0-9\-\/]*c\d+(p\d+)?\.html) 
+0

我真的很抱歉,我犯了一个错误。 我说:“我想得到前三个网址” 我需要说,“我*不希望前三个网址。”这就是为什么我使用未使用的脱字符号。 对不起,我在编辑这个问题。 – 2014-09-25 13:34:45

+0

@SarimJavaidKhan:看我的更新。 – Toto 2014-09-25 14:06:43